首页 > 解决方案 > Firesbase 中的辅助函数

问题描述

我创建了一个辅助函数来获取用户名。

export function getUserName (userId) {
    if (userId) {
        let firstName;
        let lastName;
        db.collection("users").where("uid", "==", userId)
        .get()
        .then(function(querySnapshot) {
            querySnapshot.forEach(function(doc) {
                console.log(doc.id, "=>", doc.data());
                firstName = doc.data().firstName;
                lastName = doc.data().lastName;
                console.log("firstName: " + firstName)
                console.log("lastName: " + lastName)
            })
        });
        return (<p>{firstName + " " + lastName}</p>)
    }
}

在控制台中,我看到名称通过,但在 return 语句中没有。我的猜测是 .then 没有返回,与此同时,返回已将未定义的值发送回浏览器。

想知道如何避免这种情况,并保留一些我可以调用诸如 displayName、Avatar 等的辅助函数的想法。

感谢您的任何指导!

标签: reactjsgoogle-cloud-firestore

解决方案


你是对的 - then() 是异步的,并在结果已知之前立即返回。这就是所有返回 Promise 的方法在 JavaScript 中的工作方式。

与其尝试从函数同步(直接)返回结果,不如返回另一个 Promise,该 Promise 使用您希望调用者拥有的数据进行解析。调用者可以在其上使用 then() 并在数据可用时接收数据。


推荐阅读