繁体   English   中英

如何在Node.js中将Promise.all与Request一起使用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM