【问题标题】:Async map - callback executing early异步映射 - 回调提前执行
【发布时间】: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 函数并将季节作为参数添加到最后一个函数来解决此问题

标签: mongodb async.js


【解决方案1】:

查找是一个异步操作。您可以执行以下操作:

let promise = Model.Events.find(....)

promise.then((error,data) => {
   console.log('finish');
})

这应该会在你在 find 中的任何一段代码之后调用finish。

【讨论】:

    猜你喜欢
    • 2018-03-27
    • 1970-01-01
    • 2016-05-01
    • 2021-02-13
    • 1970-01-01
    • 2015-07-30
    • 2023-03-04
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多