Mongodb 异步映射-早期执行回调
在这个异步映射中,最后一个回调参数在“In events”注销之前被调用。(我只是使用console.log来避免过于复杂化) 因此,我登录“最后一个cb”的地方是在所有“地图中”事件之后但在事件之前被记录。如何阻止最后一次回调立即开火Mongodb 异步映射-早期执行回调,mongodb,async.js,Mongodb,Async.js,在这个异步映射中,最后一个回调参数在“In events”注销之前被调用。(我只是使用console.log来避免过于复杂化) 因此,我登录“最后一个cb”的地方是在所有“地图中”事件之后但在事件之前被记录。如何阻止最后一次回调立即开火 const addEvents = (seasons, cb) => { async.map(seasons, (season, seasonCb) => { console.log('in map'); Model.Events.find(
const addEvents = (seasons, cb) => {
async.map(seasons, (season, seasonCb) => {
console.log('in map');
Model.Events.find({season_id: season._id.toString()}, (err, events) => {
if (err) {
console.log('in err');
return seasonCb(err);
}
console.log(events, 'events');
});
console.log('finish');
seasonCb(null, season);
}, (err) => {
if (err) {
console.log('in err');
return cb(err);
}
console.log(seasons, 'in last cb');
cb(null, seasons);
});
};
查找是一个异步操作。您可以执行以下操作:
let promise = Model.Events.find(....)
promise.then((error,data) => {
console.log('finish');
})
这应该使finish在您找到的任何代码之后被调用。finish也在事件之前被调用吗?是的,它在map中登录,然后在每次迭代之后直接完成,然后在last cb中,然后在events last中。通过移动seasurecb(null,seasure)解决了这个问题将季节添加到find函数中,并将季节作为参数添加到最后一个函数中