我在我的节点/猫鼬应用程序中使用 async lib 并遇到了一些我不明白的问题。我得到了这段代码:
var model_1;
async.series([
function (callback) {
Model1.findOne( {_id: mongoose.Types.ObjectId(model1_id)}, function (err, model1) {
if (err) {
callaback(err);
} else {
model_1 = model1;
callback();
}
});
},
function (callback) {
async.forEach(req.body.myArray, function (element, callback) {
model2 = new Model2();
model2.name = element.name;
Model3.findOne( { _id: element.model3_id }, function (err, model3) {
if (err) {
callaback(err);
} else {
Model4.findOne( { _id: element.model4_id }, function (err, model_4) {
data.push({
model_1: model_1,
model_2: model_2,
model_3: model_3,
model_4: model_4,
});
callback();
});
}
});
}
}, function (err) { /* callback for async.forEach */
if (err) {
callback(err);
} else {
for(var i = 0; i < data.length; i++) {
console.log(i+": m2 id: "+data[i].model_2._id);
console.log(i+": m3 id: "+data[i].model_3._id);
console.log(i+": m4 id: "+data[i].model_4._id);
}
}
});
}], function (err) { /* callback for async.series */
if (err) {
next(err);
}
});
我的 json 身体看起来像
{
model1_id: XXXX,
myArray: [
{model3_id: YYYY_1, model4_id: ZZZZ_1},
{model3_id: YYYY_2, model4_id: ZZZZ_2},
{ ... }
]
}
我得到的问题是,在我打印数据时的 async.forEach 回调中,model_2.id 对于所有元素都是相同的,model_3 和 model_4 ids 与 myArray 中的相同,但是我在所有位置上都得到了相同的 model_2 对象在数据变量中。如何解决这个问题?我可以将 model_2 传递给我的 find 调用吗?