React Native 和 Firebase RTDB - 返回时遇到问题



我使用React Native与Firebase SDK(版本9)。我有一个函数,应该检查在数据库中,看看我是否有一个访问令牌存储,当它到期,如果是这样。我需要代码返回真或假作为结果。我想我搞错了,因为get是异步的。以下是我目前的内容:

export const checkToken = (useruid) => {
const db = getDatabase();
let outcome = "not set"
const userRef = ref(db,'/users/'+useruid);
get(userRef).then((snapshot) => {
console.log('snapshot is', snapshot)
let expire_time = snapshot.val().expire_time
if (expire_time > Date.now() + 180000) {
console.log('expire time is more than 3 min in the future')
outcome = true 
return true
} else {
console.log('token is stale, snapshot is ',snapshot)
outcome = false 
return false
} 

}   )
console.log('outcome is now', outcome)
}

最后一个console.log首先出现(现在没有设置结果),如果我在另一个函数(如console.log(checkToken(someUserID)))中调用checkToken,则返回未定义。然后,我通过成功的快照检索获得所有控制台日志记录。

我读过关于承诺,和async/await,但我有麻烦,翻译为Firebase RTBD SDK功能。

提前感谢您的帮助/指点!

如果你把它改成:

export const checkToken = async function (useruid) {
const db = getDatabase();
let outcome = "not set"
const userRef = ref(db,'/users/'+useruid);
await get(userRef).then((snapshot) => {
.... insert rest of code

它应该如你所愿。

你提到了关于promises和async/await的阅读,但是你可能也想读一下JS的事件循环。基本上,JS在转到其他代码之前不会等待异步操作。所以你现在构造它的方式它启动get(userRef),然后在等待承诺返回时继续前进。

最新更新