【发布时间】:2020-03-05 12:42:24
【问题描述】:
我目前正在学习异步的工作原理,同时使用 Firebase 数据库处理一个小型项目。 据我了解,await 应该暂停该功能,直到一个承诺得到解决,但在我的情况下,它并没有等待那个。
我已经缩短了 2 个用于测试的函数:
async findUser(id) {
await this.firebase.findUserData(id).then(
value => {
console.log('finduser stopped waiting');
return value;
}
)
}
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;
});
}
控制台输出如下所示: (not allowed to embed images yet)
它首先运行 findUser,然后是 Firebase 调用,但在返回值之前不会等待该承诺完成。找到最后打印的用户 ID。
我确定我在这里做了一些非常愚蠢的事情,但我暂时想不通,也没有其他人可以求助。
对不起,如果问题写得不好。第一次在这里发帖。欢迎任何反馈!
【问题讨论】:
-
我强烈建议在 TypeScript 中编写
async代码(或任何与Promise<T>一起使用的代码),这有助于检测此类编码错误。 Angular 和 Firebase 都支持 TypeScript(在 Angular 中是必需的):firebase.google.com/docs/functions/typescript -
谢谢。我一定会的。这次是我为 CS 课程做的一个项目的扩展,所以我没有太多选择。
标签: javascript firebase-realtime-database async-await