我创建了一个帮助程序功能,用于获取用户名。
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等。
感谢您的指导!
答案 0 :(得分:0)
您是正确的-then()是异步的,并在知道结果之前立即返回。这就是所有返回promise的方法都可以在JavaScript中工作的方式。
您不应返回从函数同步(直接)返回结果的方法,而应返回另一个可以解决您希望调用者拥有的数据的promise。调用方可以在其上使用then()并在数据可用时接收数据。