Firesbase中的辅助功能

时间:2019-11-17 02:25:53

标签: reactjs google-cloud-firestore

我创建了一个帮助程序功能,用于获取用户名。

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等。

感谢您的指导!

1 个答案:

答案 0 :(得分:0)

您是正确的-then()是异步的,并在知道结果之前立即返回。这就是所有返回promise的方法都可以在JavaScript中工作的方式。

您不应返回从函数同步(直接)返回结果的方法,而应返回另一个可以解决您希望调用者拥有的数据的promise。调用方可以在其上使用then()并在数据可用时接收数据。

相关问题