【问题标题】:Understanding Asycn each了解每个异步
【发布时间】:2016-12-30 04:17:56
【问题描述】:

我有一个通过数组调用 async.each 的函数。在 asycn.each 中有一个函数,它通过第一个函数传递的数据调用 async.each。

var f1 = function(){
      var b = [o1,o2,o3,o4,o5,o6....];
      async.forEach(b, function(obj, cb){
             f2(obj, function(){
                 cb();
             })
      }, function(err){
      })
};

var f2 = function(obj, c2){
       async.forEach(obj, function(obj2,cb){
          // some db operation
          return dbData;
          cb();
}, function(){
       // do asynch operation on dbData and update value in db
})
};

现在,我的疑问是,当 f2 对 f1 中传递的第一个项目执行 async.forEach 时,回调被调用并且回调对 f2 中传递的 obj 执行一些操作。但是由于这是并行执行的,所以当第一个项目的回调被调用时,它是否会具有相同的 obj 对象来继续操作,或者 obj 的值可能与其他 asych 不同。每个任务已通过相同的函数调用。

【问题讨论】:

  • 在 f2 的 forEach 中,cb() 永远不会因为 return dbData; 而被调用

标签: node.js asynchronous


【解决方案1】:

首先你的函数 f1 被执行,在它完成之后函数 f2 被执行。

var f1 = function(){
          var b = [o1,o2,o3,o4,o5,o6....];
          async.forEach(b, function(obj, cb){
                 f2(obj, function(){
                     cb();
                 })
          }, function(err){
          })
    };
        async.eachSeries(f1, f2, function (err) {
            if (err) {
                res.json({status: 0, msg: "OOPS! How is this possible?"});
            }
            res.json("Series Processing Done");
        })
       var f2 = function(obj, c2){
           async.forEach(obj, function(obj2,cb){
              // some db operation
              return dbData;
              cb();
    }, function(){
           // do asynch operation on dbData and update value in db
    })

【讨论】:

  • 这不是我的用例。 F1 必须为每个数组处理调用 F2。并且一旦所有 F2 处理完毕,F1 回调就会返回。我只想知道 f2 中的回调是否会获得 f1 中传递的 obj 或其他一些 obj,因为它是并行处理的。
  • 据我了解,您将执行函数 f1,然后执行函数 f2。这些操作一个接一个地进行。先 f1 然后 f2。
  • 没有。这是与数组相关的数据库操作。我有 10 个不同的 obj 要更新,它们都同时发生。所以 f1 得到第一个 obj 然后在 f2 中执行操作,其他操作类似。不是一个接一个。
  • async.series([ function f1 (){ ... 第一个函数在这里执行然后 cb 从这里 }, function f2 (){ ... 第二个函数在这里执行。} ]);希望这会有所帮助。
猜你喜欢
  • 2016-09-28
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 2023-03-08
  • 2011-12-15
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多