如何在node.js中使用Promise.all和Request?

时间:2018-03-30 19:22:23

标签: 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() }),
                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完成所有操作时才处理它们,而我宁愿不使用一堆回调。

3 个答案:

答案 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....

    });