2016-02-21 60 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'); 
});