[英]How to use Promise.all with Request in node.js?
我想按照以下方式做一些事情:
Promise.all([
fetch(url1).then(function(response){ return response.json() }),
fetch(url2).then(function(response){ return response.json() }),
fetch(url3).then(function(response){ return response.json() }),
fetch(url4).then(function(response){ return response.json() })
]).then(allResponses => {
var data1 = allResponses[0];
var data2 = allResponses[1];
var data3 = allResponses[2];
var data4 = allResponses[3];
// process data....
});
上面是React.js代码,我想做同样的事情,但是服务器上使用Node.js。 问题是我没有获取,我有请求(我什至应该使用请求吗?)。 https://github.com/request/request以这种方式使用...
var request = require('request');
request(url1, function (error, response, body) {
});
但是我如何在Promise.all中使用request? 因为我想获取多个内容,并且仅在完成所有操作后才在Node中处理它们,所以我不希望使用一堆回调。
更简而言之,在安装node-fetch之后,您可以进行一个可返回JSON的Promise-return提取...
const fetch = require('node-fetch');
function fetchJSON(url) {
return fetch(url).then(response => response.json());
}
从网址数组中构建一个承诺数组
let urls = [url1, url2, url3, url4];
let promises = urls.map(url => fetchJSON(url));
当这些诺言解决时做些什么
Promise.all(promises).then(responses => console.log(responses));
将请求转换为承诺:
function promiseRequest(url) {
return new Promise(resolve => {
request(url, function(err, response, body) {
resolve(body);
});
});
}
然后你可以做类似的事情
const allBodies = await Promise.all([
promiseRequest(url1),
promiseRequest(url2),
promiseRequest(url3)
]);
但是最好使用本地fetch
。
我已经做了
npm install node-fetch
接着
var fetch = require('node-fetch');
然后我可以使用上面的代码,即
Promise.all([
fetch(url1).then(function(response){ return response.json() }),
fetch(url2).then(function(response){ return response.json() }),
fetch(url3).then(function(response){ return response.json() }),
fetch(url4).then(function(response){ return response.json() })
]).then(allResponses => {
var data1 = allResponses[0];
var data2 = allResponses[1];
var data3 = allResponses[2];
var data4 = allResponses[3];
// process data....
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.