Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 传递承诺的结果_Javascript_Reactjs_Firebase_Promise_Firebase Authentication - Fatal编程技术网

Javascript 传递承诺的结果

Javascript 传递承诺的结果,javascript,reactjs,firebase,promise,firebase-authentication,Javascript,Reactjs,Firebase,Promise,Firebase Authentication,因此,在我的react代码中,我有以下内容: componentDidMount = () => { firebase.auth().getRedirectResult().then(function(result) { if (result.credential) { var token = result.credential.accessToken; } var ruser = result.user;

因此,在我的react代码中,我有以下内容:

  componentDidMount = () => {
    firebase.auth().getRedirectResult().then(function(result) {
        if (result.credential) {
          var token = result.credential.accessToken;
        }
        var ruser = result.user;
        console.log(ruser.displayName, 'lol'); //THIS LOGS CORRECTLY
      }).catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
        var email = error.email;
        var credential = error.credential;
      }).then(function(result){
        this.setState({user: ruser});
        console.log(result, 'rslt'); //THIS LOGS UNDEFINED 
      });

  }

我基本上想设置登录用户的状态。然而,当我把这个传下去的时候,我变得不明确了,我对承诺做了什么错事?我只想传递结果,并使其在函数范围之外可用…

除非您返回您声明的内容,否则承诺内的声明是没有意义的-如果您想传递它,您必须返回
result

componentDidMount = () => {
  firebase.auth().getRedirectResult().then(function(result) {
      if (result.credential) {
        var token = result.credential.accessToken;
      }

      console.log(result.user.displayName, 'displayName');

      return result; // this will be passed down
    }).catch(function(error) {
      var errorCode = error.code;
      var errorMessage = error.message;
      var email = error.email;
      var credential = error.credential;
    }).then(result => {
      this.setState({user: result.user});

      console.log(result.user, 'user'); 
    });
}

另外-正如nils所提到的,您必须在最后一次
中使用。然后
要使用父上下文,它是
设置状态

,您可能需要
在第一次
中返回结果/ruser
,然后
。此外,
不会在您最后一次
然后
回调中定义。您需要使用箭头函数或将
绑定到回调。不要忘记从
捕获
回调中返回有意义的内容,或者将其移动到末尾