【问题标题】:Promise stuck at pending when downloading from Firebase从 Firebase 下载时,Promise 停留在待处理状态
【发布时间】:2021-07-14 16:51:05
【问题描述】:

我有一个格式如下的 firebase 数据库(其中随机数/字母是用户的 uid):

profile
     kLZwdaWYEdAJ3cPk
         user_dict
questions
     category
         some other words
     another category
         some more words

user_dict 是一个存储了他们的个人资料信息的对象,我需要在应用程序继续之前下载它。

这是我用来检索它的代码:

function getUserDict() {
    let current_user_id = firebase.auth().currentUser.uid
    return firebase.database().ref().child('profile').child(current_user_id).child('user_dict').once('value').then(function (snapshot) {
        return snapshot.val()
    })
}

在这个函数之后我立即调用console.log('userLogin user_dict is', user_dict),它的值为Promise {<pending>},而应用程序挂起。我假设我的语法有问题?

【问题讨论】:

    标签: javascript firebase


    【解决方案1】:

    您的函数返回一个Promise,您需要await 它或使用then,类似于您在方法本身中所做的那样

    (async function test(){
        const user_dict = await getUserDict();
        console.log('userLogin user_dict is', user_dict);
    })();
    

    getUserDict().then(user_dict => console.log('userLogin user_dict is', user_dict));
    

    【讨论】:

    • 谢谢,但这两种方法都不适合我。我在代码共享网站上上传了我的两次尝试以及我的 getUserDict 函数,因为这里有 500 个字符的限制,所以我无法找到一种在 StackOverflow 上共享它的方法。 ronsoros.github.io/?bcd8fa220cec2a0c3a38bc6e7469c48471ccb120
    • if (is_first_time) { hideInputText() user_dict = getQuestions().then(user_dict => console.log('handleWelcome user_dict is ', user_dict)) is_user_dict = true right_button.innerText = "Next" right_button.onclick = handleFirstTime1 }
    • 它返回 user_dict 为 null,尽管我的 getQuestions 函数通常可以正常工作,这意味着它必须是 promise 的问题。 getQuestions 通常编辑一个全局变量 user_dict,但我也让它返回 user_dict,因为它不起作用,所以我认为返回值可能有助于防止承诺过早继续。
    • 我发现了问题,我传递了错误的条件变量并触发了几乎相同的函数。直到我逐行调试才注意到,对不起。我将答案标记为正确,现在工作正常。
    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2016-07-17
    • 2018-04-08
    • 2014-06-21
    • 2018-03-31
    相关资源
    最近更新 更多