Javascript 如何在node.js中将Promise.all与Request一起使用?
我想做以下几点:Javascript 如何在node.js中将Promise.all与Request一起使用?,javascript,node.js,promise,Javascript,Node.js,Promise,我想做以下几点: 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() }),
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。问题是我没有fetch,我有request(我应该使用request吗?)。
它是这样使用的
var request = require('request');
request(url1, function (error, response, body) {
});
但我如何使用带承诺的请求?因为我想获取多个内容,并且只在节点中完成所有操作后处理它们,而且我不想使用大量回调 将请求转换为承诺:
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....
});
更简单地说,在安装节点获取之后,您可以承诺返回解析为json的获取
const fetch = require('node-fetch');
function fetchJSON(url) {
return fetch(url).then(response => response.json());
}
…从URL数组构建承诺数组
let urls = [url1, url2, url3, url4];
let promises = urls.map(url => fetchJSON(url));
…当那些承诺解决时做点什么
Promise.all(promises).then(responses => console.log(responses));
您也可以在节点上安装fetch。您是否尝试过查看请求承诺?它使请求成为承诺<代码>npm安装请求承诺然后添加
var request=require('request-promise')我打算提出同样的建议,然后我想起了请求承诺