Mongodb 异步映射-早期执行回调

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(

在这个异步映射中,最后一个回调参数在“In events”注销之前被调用。(我只是使用console.log来避免过于复杂化)

因此,我登录“最后一个cb”的地方是在所有“地图中”事件之后但在事件之前被记录。如何阻止最后一次回调立即开火

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函数中,并将季节作为参数添加到最后一个函数中