Javascript nodejs async:如何在“async.series”函数块中使用包含异步调用的循环

Javascript nodejs async:如何在“async.series”函数块中使用包含异步调用的循环,javascript,node.js,async.js,Javascript,Node.js,Async.js,在使用基于async.series的设计时,我必须在功能块中使用循环,如下所示: var someFile = filePath; async.series([ function(cb) { _.forEach ( someDataList, function (item) { //call that executes out of sync

在使用基于async.series的设计时,我必须在功能块中使用循环,如下所示:

var someFile = filePath;
async.series([
    function(cb) {
         _.forEach (
               someDataList,
               function (item) {
                   //call that executes out of sync
                   writeToFile(someFile,item)
                   //how to provide callback here
                   cb(); //<- is this correct - won't this take control out of this block in the very first loop iteration?
               }
         );
    }
],
//callback function
function (err) {...}
);

要进一步了解异步,可以使用他们的方法

将函数iteratee并行应用于coll中的每个项。这个 使用列表中的一个项调用iteratee,并对何时调用进行回调 它已经完成了。如果迭代对象将错误传递给其回调,则 使用立即调用每个函数的主回调 错误

您的代码可以转换为:

var someFile = filePath;
async.series([
    function (cb) {
      async.each(someDataList, function (item, callback) {
        //call that executes out of sync
        writeToFile(someFile,item)

        // Execute internal callback for `async.each`
        callback()
      }, function (error) {
        if (error) {
          cb(error)
        } else {
          cb()
        }
      })
    }
  ],
//callback function
  function (err) {...
  }
);
但是,当然,您需要查看writeToFile函数。
如果它是sync,您需要将其包装在try{}catch{}构造中,并在catch部分运行内部回调,其中包含error callbackerror。

要了解有关异步的更多信息,您可以使用他们的方法

将函数iteratee并行应用于coll中的每个项。这个 使用列表中的一个项调用iteratee,并对何时调用进行回调 它已经完成了。如果迭代对象将错误传递给其回调,则 使用立即调用每个函数的主回调 错误

您的代码可以转换为:

var someFile = filePath;
async.series([
    function (cb) {
      async.each(someDataList, function (item, callback) {
        //call that executes out of sync
        writeToFile(someFile,item)

        // Execute internal callback for `async.each`
        callback()
      }, function (error) {
        if (error) {
          cb(error)
        } else {
          cb()
        }
      })
    }
  ],
//callback function
  function (err) {...
  }
);
但是,当然,您需要查看writeToFile函数。
如果它是sync,您需要将其包装在try{}catch{}构造中,并在catch部分运行内部回调,其中包含error callbackerror。

您可以改用forEachSeries

var someFile = filePath;
async.forEachSeries(someDataList, function(item, cb) {
   writeToFile(someFile, item)
   cb();
},
//callback function
function () {...}
);
评论后更新:

不幸的是,在forEachSeries中无法获取迭代者的索引。如果需要iteratee的索引,可以使用eachOfSeries

var someFile = filePath;
async.eachOfSeries(someDataList, function(value, key, callback) {
    //Do something with key
    writeToFile(someFile, item)
    callback();
}, //callback function
function () {...}
);

您可以改用forEachSeries

var someFile = filePath;
async.forEachSeries(someDataList, function(item, cb) {
   writeToFile(someFile, item)
   cb();
},
//callback function
function () {...}
);
评论后更新:

不幸的是,在forEachSeries中无法获取迭代者的索引。如果需要iteratee的索引,可以使用eachOfSeries

var someFile = filePath;
async.eachOfSeries(someDataList, function(value, key, callback) {
    //Do something with key
    writeToFile(someFile, item)
    callback();
}, //callback function
function () {...}
);

您需要完成循环并转到下一个函数?您需要完成循环并转到下一个函数?谢谢-您还可以让我知道如何在forEachSeries中获取迭代对象的索引吗-我在网上查找了,但找不到清晰的示例谢谢-您还可以让我知道如何获取迭代对象的索引吗forEachSeries中的iteratee-我在线查找,但找不到清晰的示例