gpt4 book ai didi

javascript - 从 MongoDB 返回和应用值有困难

转载 作者:行者123 更新时间:2023-11-30 20:37:44 27 4
gpt4 key购买 nike

我正在构建一个函数,该函数将在我通过唯一 ID(GUID)查询我的 MongoDB 后提取用户的用户名。我将不得不在我的代码库中的多个点执行此操作,因此我已将逻辑提取到它自己的辅助函数中。这是函数:

module.exports.getUserName = async function (GUID, callback) {
try {
var result = await User.findOne({
GUID: GUID
})

callback(result['_doc'].fullname)

} catch (e) {
console.log(e);
}
}

如果我 console.log(result['_doc'].fullname) 它返回我想要的内容(用户的用户名)。但是,当我尝试在我的路由中激活此功能时,JSON 对象中的 userName 返回为 null。这是调用它的函数:

dataset.comments.forEach(function(comment) {
comment.timestamp = util.timestampToDate(comment.timestamp).getTime()

Helper.getUserName(comment.userId, function(result) {
comment.userName = result;
})
});

如果我在该函数内 console.log(result) 并使用 Postman 访问我的路线,它会返回正确的名称。如果是 console.log(comment),它会返回附有用户名的评论。

但是,当我在 Postman 中运行我的路线并找到评论对象时,userName 被列为 null。就好像该函数从未被调用过一样。

当我调用路由时(我每次都重新启动服务器以进行完整性检查!)然后评论返回为:

{
"timestamp": 1521822257000,
"actionId": "b9139c26-212b-4ebe-95a1-47c86f6c64ea",
"text": "paul",
"userId": "76889991-27f5-4613-b03a-17136e21a1aa",
"userName": null,
"userImage": "http://localhost:3001/api/users/76889991-27f5-4613-b03a-17136e21a1aa?image"
},

userName: null 是这里的问题。我怎样才能使它与用户的用户名一起出现而不是 null

最佳答案

async functionsPromises 是回调的替代品!所以就这样做:

 async function getUserName (GUID, callback) {
var result = await User.findOne({
GUID: GUID
});

return result['_doc'].fullname;
}

然后可以使用map将数组映射到Promise数组,然后使用Promise.all等待所有查询完成:

 await Promise.all(dataset.comments.map(async function(comment) {
comment.timestamp = util.timestampToDate(comment.timestamp).getTime()

comment.username = await Helper.getUserName(comment.userId);
}));

console.log(dataset.comments);

所以现在数据在所有评论更新后记录。

关于javascript - 从 MongoDB 返回和应用值有困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49628792/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com