Pok*_*ora 4 javascript async-await firebase-realtime-database
我目前正在学习异步的工作原理,同时使用 Firebase 数据库开发一个小项目。据我了解,await 应该暂停函数,直到承诺得到解决,但就我而言,它不会等待这一点。
我缩短了两个用来尝试测试这个的函数:
async findUser(id) {
await this.firebase.findUserData(id).then(
value => {
console.log('finduser stopped waiting');
return value;
}
)
}
Run Code Online (Sandbox Code Playgroud)
async findUserData(userId){
console.log('firebase started looking for user');
firebase.database().ref('/users/' + userId).once('value').then(function(snapshot){
let user = (snapshot.val());
console.log('found: ' + user);
return user;
});
}
Run Code Online (Sandbox Code Playgroud)
控制台输出如下所示:( 尚不允许嵌入图像)
它首先运行 findUser,然后运行 Firebase 调用,但在返回值之前不会等待该承诺完成。找到最后打印的用户 ID。
我确信我在这里做了一些非常愚蠢的事情,但我有一段时间无法弄清楚并且没有其他人可以求助。
抱歉,如果问题写得不好。第一次在这里发帖。欢迎任何反馈!
你不应该混合await和then。然后你也不要忘记等待一个承诺(你永远不会等待/返回 .once 返回的承诺):
async findUserData(userId){
console.log('firebase started looking for user');
const snapshot = await firebase.database().ref('/users/' + userId).once('value');
let user = (snapshot.val());
console.log('found: ' + user);
return user;
}
async findUser(id) {
const value = await this.firebase.findUserData(id);
console.log('finduser stopped waiting');
return value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |