我的要求是我需要从多个REST资源加载JSON数据。为此,我需要发出多个get请求。我需要在完成所有请求后执行一些功能。
以下是我的代码:
var asyncTasks = [];
//These URLs are dynamic and can increase or decrease
var urls = ["resource1", "resource2", "resource3"];
var client = request.createClient("domainurl");
urls.forEach(function (item) {
asyncTasks.push(function () {
client.get(item, function (err, res, body) {
dataLoaded(err, res, body)
});
});
});
async.parallel(asyncTasks, function () {
// All tasks are done now
allDataLoaded();
});
function dataLoaded(err, res, body) {
console.log('Data Loaded');
};
function allDataLoaded() {
console.log("All data loaded");
}
我面临的问题是虽然正确调用了allDataLoaded
函数,但未调用dataLoaded
函数。
我正在使用request-json和async npm包。 感谢您的时间,如果需要任何其他信息,请告诉我。
答案 0 :(得分:4)
async.parallel
将回调传递给您需要调用的每个任务,否则无法知道您的任务何时完成。使用
var asyncTasks = urls.map(function (item) {
return function (cb) {
// ^^
client.get(item, function (err, res, body) {
dataLoaded(err, res, body)
cb(err);
// ^^^^^^^
});
};
});
然后async.parallel(asyncTasks, allDataLoaded)
就可以了。