2016-02-21 62 views
0

我是新来的异步库。我为每次迭代使用了async.eachSeries和async.waterfall。我看到,async.waterfall只运行一次。async.eachSeries每次迭代只运行一次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'); 
}); 

输出:

JSON保存到debuginfo.json

异步完成

任何帮助非常感谢。

回答

0

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

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'); 
});