javascript - 我的异步函数没有等待 Firebase 的 promise

标签 javascript firebase-realtime-database async-await

我目前正在学习异步的工作原理,同时使用 Firebase 数据库开发一个小项目。 据我所知, await 应该暂停该功能,直到 promise 得到解决,但就我而言,它并没有等待那个。

我已经缩短了我用来尝试测试的 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 调用,但在返回值之前不会等待该 promise 完成。 Found user id 最后打印。

我确定我正在做一些非常愚蠢的事情,但我现在暂时想不通,也没有其他人可以求助。

抱歉,如果问题写得不好。第一次在这里发帖。欢迎任何反馈!

最佳答案

你不应该混合使用 awaitthen。然后你也不要忘记等待一个 promise (你永远不会等待/返回 .once 返回的 promise ):

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;
}

关于javascript - 我的异步函数没有等待 Firebase 的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58774066/

相关文章:

c# - 允许 Firebase Xamarin 实时流式传输

c# - 等待应该恢复 Thread.CurrentContext 吗?

c# - ConfigureAwait(false) 仍然死锁

javascript - jQuery Datepicker beforeShowDay - 范围选择

javascript - 我可以在新标签页上运行用户脚本吗?

ios - 将用户信息上传到 firebase 错误(swift 项目)

c# - 如何将 DataSnapshot 与 Firebase for Unity 一起使用?

javascript - 获取在 Promise.race 中完成了哪个 promise

javascript - 有没有办法以编程方式向函数添加新参数?

javascript - 使用 javascript 幻灯片淡入图像