我想按照以下方式做点什么:
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做同样的事情。问题是我没有提取,我有请求(我应该使用Request吗?)。 https://github.com/request/request 它以这种方式使用......
var request = require('request');
request(url1, function (error, response, body) {
});
但是我如何使用Promise.all请求?因为我想获取多个东西并且只在Node完成所有操作时才处理它们,而我宁愿不使用一堆回调。
答案 0 :(得分:3)
更简洁地说,安装node-fetch之后,你可以做一个promise-returns fetch,解析为json ......
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));
答案 1 :(得分:1)
将请求转换为承诺:
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
会更好。
答案 2 :(得分:0)
我刚刚做了
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....
});