gpt4 book ai didi

Node.js - 等待所有 Model.find() 完成

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:02 27 4
gpt4 key购买 nike

我有以下两个 Monogoose 模型:

ClanMember: tag:String, name:string;
War: members:Array; #array of tags

我目前正在通过以下方式查找当前成员数组:

ClanMember.find({
'tag': {
$in: memberTags #an array of tags
}
}).limit(memberTags.length)
.exec(function(err, members) {

}

从此我想执行 War.find() 并将该信息添加到每个成员文档中,如下所示:

ClanMember.find({
'tag': {
$in: memberTags
}
}).limit(memberTags.length)
.exec(function(err, members) {

var MemberArray = [];
for (var member in members) {
if (members.hasOwnProperty(member)) {
var currentMember = members[member];
War.find({members: currentMember.tag}).exec(function(err, wars) {
currentMember.wars = wars;
MemberArray.push(currentMember);
});
}
}

#I WANT TO RENDER HERE

});

这一切发生后,我想将整个新的 Member 对象数组(带有 War 对象)传递给 View :

    res.render('members', {
members: MemberArray,
});

确保在将数组传递给渲染函数之前找到所有 War.find() 函数并完成执行的最佳方法是什么?

最佳答案

为此你必须使用 promise 。代码应如下所示。

var Promise = require('promise');
ClanMember.find({
'tag': {
$in: memberTags
}
}).limit(memberTags.length)
.exec(function(err, members) {
var promises = [];
var MemberArray = [];
members.forEach((member)=>{
var currentMember = member;
let warPromise = War.find({members: currentMember.tag}).exec().then(function(wars) {
currentMember.wars = wars;
MemberArray.push(currentMember);
return true;
}).catch(function(err){
throw err;
});
promises.push(warPromise);
}
});


Promise.all(promises).then(function(result){
#I WANT TO RENDER HERE

}).catch(function(err){

});

});

这里 Promise.all() 函数将确保之前的所有 Promise 都已完成。然后你就可以做出回应。

关于Node.js - 等待所有 Model.find() 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43238382/

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