并行API请求的asynchronous模块错误

我是node.js中的一个begginer,现在我正试图获得一些API的结果。 我使用asynchronous模块( https://github.com/caolan/async )来并行请求,因此可以优化。

问题是代码返回一个错误,每次都指向不同的API调用不同的行(“callback(err,数据)”行)

这是错误的:

if (called) throw new Error("Callback was already called."); ^ Error: Callback was already called. 

我正在使用以下函数来请求API:

 function getData(s, apiURL, getURL, callback) { var ht; if (s == 1) { ht = https; } else { ht = http; } var options = { hostname : apiURL, path : getURL, method : 'GET' } var content = ""; ht.get(options, function(res) { console.log("Got response: " + res.statusCode); res.on("data", function(chunk) { content += chunk; //console.log(content); callback(content); }); }).on('error', function(e) { console.log("Error: " + e.message); console.log(e.stack); }); } 

为了说明,这是我如何使用asynchronous模块:

 var sources = sources.split(',') async.parallel({ flickr : function(callback) { if (sources[0] == 1) { getData(0, 'api.flickr.com', "/services/rest/?method=flickr.photos.search&format=json&nojsoncallback=1&api_key=" + config.flickr.appid + "&per_page=5&tags=" + tags, function(data) { callback(null, data); //here that the error may point }); } else { callback(); } }, instagram : function(callback) { if (sources[1] == 1) { getData(1, 'api.instagram.com', "/v1/tags/" + tags.split(',')[0] + "/media/recent?client_id=" + config.instagram, function(data) { callback(null, data); //here that the error may point }); } else { callback(); } } }, function(err, results) { console.log(results); }); 

希望你能帮助我,谢谢!

您正在调用data事件中的callback函数( 请参阅文档 ),每次接收大量数据时都会触发该函数,这意味着多次。

Async.parallel期望每个任务只执行一次callback。

为了确保每个任务只有一个callback,例如,将callback放在end事件上。

而且,错误事件也应该执行callback。