React Native - 在评估promise时,Undefined不是对象

时间:2018-05-17 08:43:12

标签: reactjs react-native

我是初学反应本地程序员。我试图在fetch函数中返回responseJSON。我知道它是异步的并且将返回promise,因此我需要使用.then(),但是当它说undefined不是对象时。

这是代码

auth.js

export const onVerify = (email,password,navigation) => {
          console.log('Verifying');
          fetch('xxx',
            {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                body: 'email=' + email + '&password=' + password
            })

            .then((response) => response.json())
            .then((responseJson) => {
                if(responseJson.status == '200') {
                  Alert.alert(
                    'Login Successful',
                    'Welcome Home'
                  );

                  let data = {
                      name: responseJson.name,
                      id : responseJson.id
                  };


                  onSignIn();
                  return responseJson

                }

在我的signin.js

export default class SignIn extends React.Component{

  step(){
 onVerify(this.state.email,this.state.password,this.props.navigation).then(
      function(data) {
        console.log(data);
      }
    );
  }

1 个答案:

答案 0 :(得分:0)

正如@teivaz对评论所说,你的onVerify函数什么都不返回。因为fetch调用是异步的。因此,您可以从Promise返回onVerify,然后您就可以从step函数中解析它。

这是你实现这个的方法,

export const onVerify = (email,password,navigation) => {
    return new Promise((resolve, reject) => {
        fetch('endpoint',
            {
                method,
                headers,
                body,
            })
            .then((response) => response.json())
            .then((responseJson) => {
                if(responseJson.status == '200') {
                    Alert.alert(
                        'Login Successful',
                        'Welcome Home'
                    );

                    let data = {
                        name: responseJson.name,
                        id : responseJson.id
                    };


                    onSignIn();
                    resolve(responseJson)
                }
            })
            .catch(err => reject(err));
    }
}

另外,请确保在step函数中捕获错误。

export default class SignIn extends React.Component{
    step(){
        onVerify(this.state.email,this.state.password,this.props.navigation).then(
            function(data) {
                console.log(data);
            }
        )
        .catch(err => console.log('Error occured', err));
    }
}