【发布时间】:2017-02-24 10:33:38
【问题描述】:
在这个异步映射中,最后一个回调参数在它注销“事件”之前被调用。 (我只是使用 console.log 来避免过于复杂)...
所以我在“in last cb”登录的地方是在所有“in map”之后但在事件之前登录的。如何立即阻止最终回调触发?
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);
});
};
【问题讨论】:
-
在事件之前是否也调用了finish?
-
是的,它会登录地图,然后在每次迭代后立即完成,然后在最后一个 cb 中,然后是最后一个事件。
-
通过将 seasonCb(null, season) 移入 find 函数并将季节作为参数添加到最后一个函数来解决此问题