我想做一些类似的事情:
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) {
});
但是我如何将 request 与 Promise.all 一起使用呢?因为我想获取多个内容,并且仅在所有内容完成后(但在 Node 中)处理它们,而且我不想使用一堆回调。
更简洁地说,安装node-fetch后,您可以进行一个解析为json的承诺返回的fetch...
const fetch = require('node-fetch');
function fetchJSON(url) {
return fetch(url).then(response => response.json());
}
...从一组 url 构建一系列 Promise...
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....
});