在异步函数似乎没有等待的情况下,我遇到了问题。我从另一个异步函数调用一个异步函数,第二个在异步操作完成后返回一个值,然后第一个应该像它等待的那样返回这个值。但是,当在第一个函数中记录accessToken时,它会在等待第二个函数返回之前进行日志记录。我哪里出问题了?提前谢谢。
export const confirmCode = async (verificationId, code) => {
try {
const credential = await firebase.auth.PhoneAuthProvider.credential(verificationId, code);
const accessToken = await authenticate(credential);
console.log(accessToken); // prints undefined as does not wait for above function call?
return accessToken;
} catch (error) {
console.log(error)
// this.showMessageErrorByCode(e.error.code);
}
}
const authenticate = async (credential) => {
try {
await firebase.auth().signInWithCredential(credential).then(result => {
const user = result.user;
user.getIdToken().then(accessToken => {
return accessToken;
});
})
} catch (error) {
console.log(error);
}
}发布于 2019-08-19 10:54:17
不应将async/await与旧版本的.then()混为一谈。
只需在没有then()的情况下使用它,如下所示:
export const confirmCode = async (verificationId, code) => {
try {
const credential = await firebase.auth.PhoneAuthProvider.credential(verificationId, code);
const accessToken = await authenticate(credential);
console.log(accessToken); // prints undefined as does not wait for above function call?
return accessToken;
} catch (error) {
console.log(error)
// this.showMessageErrorByCode(e.error.code);
}
}
const authenticate = async (credential) => {
try {
let result = await firebase.auth().signInWithCredential(credential); // <-- use await
const user = result.user;
accessToken = await user.getIdToken(); // <-- use await
return accessToken;
} catch (error) {
console.log(error);
}
}要获得更详细的解释,请了解为什么您的代码不能工作:
.then()中返回,这是不可能的。return new Promise((resolve, reject) => { /* Code ... */ });包装您的函数内容resolve(accessToken)而不是返回.then()和.catch()而不是await和try/catch
但我建议您使用async/await方法,因为它更容易阅读。
https://stackoverflow.com/questions/57555282
复制相似问题