在我的 node.js 项目中,我需要发出迭代 API 请求,因此我使用 async.each 方法。
控制台提示 url 未定义,我理解这一点,因为我只声明了 urls,它是一个 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)
});
最佳答案
看来您正在使用回调和所有内容调用request
,而不仅仅是引用它,这意味着您可能需要匿名函数调用。
此外,如果您想要在末尾有一个数组,或者您要扩展的任何内容,您可以只使用 async.map
代替,并执行类似的操作
var urls = Object.keys(result.items).map(function(item) {
return "https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=" + result.items[item].contentDetails.videoId + "&key=xxx";
});
async.map(urls, function(url, callback) {
request(url, function(err, response, body) {
if (err) {
return callback(err);
}
callback(null, JSON.parse(body));
});
}, function(err, extended) {
if (err) {
// handle error
}
// extended is an array containing the parsed JSON
getVideoDetailsCallback(null, extended);
});
关于javascript - 如何在 Node.js Express 的 async.each 中使用 request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34407662/