无法在异步函数中返回值
2021-10-12
155
我有一个专门用于处理 React Native App 身份验证功能的文件。其中一个函数
getJWToken
是一个匿名异步函数,它尝试通过以下方式获取当前用户令牌:
const auth = db.auth()
// db === (Firebase.apps.length === 0 ? Firebase.initializeApp(config) : Firebase.app())
// the configuration of the Firebase DB occurs in a config file and db is exported.
const getJWToken = async () => {
auth.onAuthStateChanged(function(user) {
if (user) {
user.getIdToken()
.then(function(idToken) {
return idToken;
})
.catch(
(error) => {
console.log("Cannot get User Token: ", error);
}
)
}
});
}
通过
console.log
,我能够看到该函数按预期返回令牌。当我在另一个文件的另一个异步函数中使用它时,问题就出现了,如下所示:
服务文件夹 index.js
import * as Auth from './AuthServices'
export {Auth}
App.tsx
// App.tsx
import {Auth} from './src/services'
// The rest in inside an Async Function
signOut: async () => {
let token
token = await Auth.getJWToken()
console.log("token: ", token) // results in undefined
}
令牌导致
undefined
。我无法从承诺函数返回令牌值。我尝试在
auth.onAuthStateChanged
上使用
return
,但这会导致 token 评估为
[Function Bound]
。在
auth.onAuthStateChanged
上使用
await
也没有任何作用。我真的被难住了。
2个回答
您必须在代码中显示的另外两个地方返回。请使用此修改进行回复,让我们 c
const auth = db.auth()
// db === (Firebase.apps.length === 0 ? Firebase.initializeApp(config) : Firebase.app())
// the configuration of the Firebase DB occurs in a config file and db is exported.
const getJWToken = async () => {
return auth.onAuthStateChanged(function(user) {
if (user) {
return user.getIdToken()
.then(function(idToken) {
return idToken;
})
.catch(
(error) => {
console.log("Cannot get User Token: ", error);
}
)
}
});
}
Vivek Vs
2021-10-12
虽然我不再使用这个代码片段,但我能够像这样解决它:
getJWToken
export const getJWToken = async () => {
let result;
// await is needed here
await auth.onAuthStateChanged(function(user) {
if (user) {
console.log("user")
// save this promise to result
result = user.getIdToken()
.then(function(idToken) {
return idToken;
})
.catch(
(error) => {
console.log("Cannot get User Token: ", error);
}
)
}
});
// return the user.getToken() promise
return result
Jevon Cowell
2022-02-20