reactjs - 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 等的辅助函数的想法。
感谢您的任何指导!
解决方案
你是对的 - then() 是异步的,并在结果已知之前立即返回。这就是所有返回 Promise 的方法在 JavaScript 中的工作方式。
与其尝试从函数同步(直接)返回结果,不如返回另一个 Promise,该 Promise 使用您希望调用者拥有的数据进行解析。调用者可以在其上使用 then() 并在数据可用时接收数据。
推荐阅读
- r - 日期框架未正确解析 H:M:S
- ios - 如何在移动模拟器中测试地图航向功能?
- r - 如何通过posixct将09-Oct-2017这样的日期转换为09-11-2017?
- django - Django 更改模型选择的查询集
- azure-logic-apps - (Azure 逻辑应用):如何从授权应用获取访问令牌
- javascript - bug:ReferenceError: self 未定义 exif-js
- oracle - 数字中尾随零的数量
- git - 在 Gitlab 中使用 SVN 自动同步 Git 存储库
- wso2 - 如何将用户存储和 Oauth 从 4.5.0 迁移到 5.5.0 WSO2 IS
- android - Android Geofencing API 在后台可以正常工作,但不能用于 GPS