如何把不同的请求的响应放在与nodejs相同的文档中并请求?

嗨,我想把不同的请求的反应在同一个文件。 我有这个文件:

var result = {google:"", twitter:"", facebook:""} 

我想对这些网站(google.com,Facebook.com,twitter.com)做不同的GET请求,并把所有的结果放在通讯录中。 我尝试了嵌套的callback,但这样我必须先做谷歌调用,然后像这样的微博等:

 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); } }); } }); } }); 

所以我必须知道如何做所有的请求并行,当我有结果对象中的所有请求的响应,我必须使用它。

你可以使用asynchronous

 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: ""} }); 

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); });