サービスでasync.series([])を使用し、その結果をControllerに返したいとします。しかし、async.seriesのオプションのコールバック関数は、タスクが終了してからコントローラに戻るまで待機しないようです。同様の場合 Sails.js async.series([])のforループを使用する方法は?
/* 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); }
});
}
このforループ内で行っている呼び出しは**ループ反復**よりも実際に遅いです。したがって、ループが完了すると、コールバックが呼び出され、コントローラに戻ります。ループは、その関数呼び出しが終了するまで待機しません。 –