您好我想在同一份文件中提出不同的请求回复。我有这个文件:
var result = {google:"", twitter:"", facebook:""}
我想对这些网站(google.com,Facebook.com,twitter.com)做不同的GET请求,并将所有结果放在通讯字段中。 我尝试使用嵌套回调,但是这样我必须首先进行谷歌通话,然后是推特等,这样:
Request({
url:first_url,
},function(err, response, body) {
if (err) {
request.log(err);
}else{
risultato.google = body;
Request({
url:second_url,
},function(err, response, body) {
if (err) {
request.log(err);
}else{
risultato.facebook = body;
Request({
url:third_url,
},function(err, response, body) {
if (err) {
request.log(err);
}else{
risultato.twitter = body;
console.log(result);
}
});
}
});
}
});
所以我必须知道如何并行执行所有请求,并且当我在结果对象中获得所有请求的响应时,我必须使用它。
答案 0 :(得分:2)
您可以使用async
var async = require('async');
var request = require('request');
async.parallel({
google: function(cb) {
request("https://google.com", function(err, resp, data) {
cb(err, data)
})
},
facebook: function(cb) {
request("https://facebook.com", function(err, resp, data) {
cb(err, data)
})
},
twitter: function(cb) {
request("https://twitter.com", function(err, resp, data) {
cb(err, data)
})
},
}, function(err, results) {
console.log(err, results);
//results is now equals to {google: "", facebook: "". twitter: ""}
});
答案 1 :(得分:2)
async
的替代方法是使用Promise API。有一个request-promise
npm库(https://www.npmjs.com/package/request-promise),它为每个请求返回一个Promise。我们可以发送每个URL的请求,然后只需在Promises列表中调用Promise.All:
const request = require('request-promise');
const urls = ['http://google.com', 'http://yelp.com'];
// List of Promises that resolve the original URL and the content
const resultPromises = urls.map(url => {
return request(url).then(response => ({ url, response }));
});
Promise.all(resultPromises)
.then(results => {
// results is an array containing the URL and response for each URL
console.log(results);
});