Javascript 传递承诺的结果
因此,在我的react代码中,我有以下内容: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;
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
,然后。此外,此不会在您最后一次然后回调中定义。您需要使用箭头函数或将此
绑定到回调。不要忘记从捕获
回调中返回有意义的内容,或者将其移动到末尾