async.eachSeries 每次迭代仅运行一次,其中包含 async.waterfall

async.eachSeries runs only once with async.waterfall inside for each iteration

我是异步库的新手。我在每次迭代中都使用了 async.eachSeries 和 async.waterfall。我明白了,async.waterfall 只运行一次。

这是我的代码:

var fs = require('fs'),
async = require('async'),
Client = require('node-rest-client').Client;

// REST API Call and output in jsonOutput.results

console.log(jsonOutput.results.length); // jsonOutput.results has 124 records.

async.eachSeries(jsonOutput.results, function(account, callback) {
  var dataObject = {};
  dataObject.updatetime = new Date();

  var setAccountInfoURL = ""; // Data Update REST API Request

  async.waterfall([
    function setAccountInfo(updateCallback) {
      // client.get(setAccountInfoURL, function (data, response) {
      //   var jsonOutput = JSON.parse(data.toString('utf8'));

      updateCallback(null, "output", account)
      // });
    },
    function saveAccountInfo(jsonOutput, account, updateCallback) {
      var debuglog = JSON.stringify(account) + "\n" + jsonOutput;

      fs.appendFile("debuginfo.json", debuglog + "\n", function (err) {
        if(err) {
          console.log(err);
        }

        console.log("JSON saved to " + "debuginfo.json");
        updateCallback(null);
      });
    }
  ],function asyncComplete(err) {
    if (err) {
      console.warn('Error setting account info.', err);
    }

    console.log('async completed');
  });
}, function(err){
  if (err) {
    console.log('error in loop');
  }

  console.log('loop completed');
});

输出:

124

JSON 保存到 debuginfo.json

异步完成

非常感谢任何帮助。

我发现了我的错误。我错过了在异步完成后每次迭代后调用回调。

var fs = require('fs'),
async = require('async'),
Client = require('node-rest-client').Client;

// REST API Call and output in jsonOutput.results

console.log(jsonOutput.results.length); // jsonOutput.results has 124 records.

async.eachSeries(jsonOutput.results, function(account, callback) {
  var dataObject = {};
  dataObject.updatetime = new Date();

  var setAccountInfoURL = ""; // Data Update REST API Request

  async.waterfall([
    function setAccountInfo(updateCallback) {
      // client.get(setAccountInfoURL, function (data, response) {
      //   var jsonOutput = JSON.parse(data.toString('utf8'));

      updateCallback(null, "output", account)
      // });
    },
    function saveAccountInfo(jsonOutput, account, updateCallback) {
      var debuglog = JSON.stringify(account) + "\n" + jsonOutput;

      fs.appendFile("debuginfo.json", debuglog + "\n", function (err) {
        if(err) {
          console.log(err);
        }

        console.log("JSON saved to " + "debuginfo.json");
        updateCallback(null);
      });
    }
  ],function asyncComplete(err) {
    if (err) {
      console.warn('Error setting account info.', err);
    }

    console.log('async completed');
    callback(null);  // this is the change.
  });

}, function(err){
  if (err) {
    console.log('error in loop');
  }

  console.log('loop completed');
});