2016-03-08 43 views
1

嗨我想把不同的請求的響應放在同一個文件中。我有這個文件:如何將不同的請求的響應放在與nodejs和請求相同的文檔中?

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

我想要做不同的GET請求到這些站點(google.com,Facebook.com,twitter.com),並把所有的結果對應的領域。 我試圖與嵌套的回調,但這種方式,我必須首先做谷歌的電話,那麼Twitter的是這樣的:

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

所以我要知道怎麼做並行的所有要求,而當我在結果對象中具有所有請求的響應,我必須使用它。

回答

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

的替代async是使用無極API。有一個request-promise npm庫(https://www.npmjs.com/package/request-promise),它爲每個請求返回一個Promise。我們可以發送每個URL的請求,然後只需致電Promise.All在Promises列表中:

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); 
    }); 
相關問題