在我的node.js项目中,我需要制作迭代API请求,所以我使用的是async.each方法。如何在node.js Express的async.each中使用请求
控制台抱怨url没有定义,我明白这一点,因为我只声明了url是一个数组。
我只是不知道如何可以将request()从请求模块放在一起async.each。为了满足async.each()我把urls作为第一个参数,但request()本身需要一个查询字符串参数,它是url。
我也在用Underscore中的_.extend来合并两个响应,但是我不确定我现在所在的位置是否在正确的位置。
有人可以请指出我在正确的方向吗?
var urls = [];
Object.keys(result.items).forEach(function(item) {
urls.push("https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=" + result.items[item].contentDetails
.videoId + "&key=xxx");
})
async.each(
urls,
request(url, function(err, response, body) {
if (err) {
console.log(err);
return;
}
body = JSON.parse(body);
}),
function() {
var extended = _.extend(result, body);
getVideoDetailsCallback(null, extended)
});
谢谢。看起来很有希望。我使用_.extend是因为我需要将包含解析的JSON的'extended'与来自第一个API请求的响应合并。这是我以前的问题,显示使用async.waterfall的结构。 http://stackoverflow.com/questions/34406490/node-js-dependant-api-request-calls-using-async-waterfall-and-merge-json-respo 如何合并本次迭代的JSON与另一个JSON从其他回应? –
使用'.map'时,最终回调中收到的数据extented将是一个包含所有请求数据的数组。我可能会修改'getVideoDetailsCallback'函数来获得这样一个数组,并且只是将该函数作为最后的回调函数引用,但是如果你想合并最终数组,你可能需要更多的东西 - > http:// stackoverflow.com/questions/27556728/how-can-i-merge-array-of-objects-with-underscore-js – adeneo