[英]Sails.js how to use for loop in async.series([ ])?
我想在我的服務中使用async.series([]),然后將結果返回給Controller。 但是,似乎帶有async.series的可選回調函數不會等到任務完成后才返回控制器。
/* In Services */ getFunction: function(userInput, callback) { var results = {}; async.series([ //1: This function get a list JSON dataset of id and other attributes function(callback) { //Call a function to call API by using the userInput, return function(error, JSONdataset1) //If error, return callback(error) //Else results = JSON.parse(dataset1); callback(null, JSON.stringify(results)); }, //2: This function get a JSON object by input the id result from above function //I am not sure I should use for loop here as well, can someone advise me please! function(callback) { for(var result in results) { //Call another function to call API by using the id in the returned results, return function(error, JSONdataset2) //If error, return callback(error) //Else var aName = JSON.parse(JSONdataset2); results[result].name = JSON.parse(JSON.stringify(aName.attribute)); } callback(null, JSON.stringify(results)); } ], //res = [JSON.stringify(results), JSON.stringify(results)] and result should return to Controller //The problem is the callback doesn't wait above functions finish before return. function(error, res) { if(error) { return callback(error, null); } else { return callback(null, res); } }); }
在類似的情況下,我將使用async.each()函數,例如
async.each(results, function(result){
var aName = JSON.parse(JSONdataset2);
results[result].name = JSON.parse(JSON.stringify(aName.attribute));
callback();
}, function(err){
if(err) callback(err,null);
else callback(null, JSON.stringify(results));
})
這將確保在調用屬於您的series函數的回調之前迭代每個結果。
我使用async.waterfall代替了我之前發布的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.