首页 > 解决方案 > 如何在 Node JS 中使用动态 URL 进行一系列并行(异步)API 请求

问题描述

如何在 Node JS 中异步调用 HTTP 请求。我有以下3个主要挑战。

以下方法用于调用单个端点。

const options = {
    method: 'POST',
    uri: "http://api.example.com"
}

常量响应 = 等待请求(选项);

请求承诺 NPM


为了异步调用,我使用了parallel-http-request,如下所示。

request.add({
    url:'https://jsonplaceholder.typicode.com/posts/1', 
    method:'post',
})
.add({
    url:'https://jsonplaceholder.typicode.com/posts/2', 
    method:'post'
})
.add({
    url:'https://jsonplaceholder.typicode.com/posts/3', 
    method:'post'
});

上述两种方法都支持静态数量的 API 请求,无法动态处理。

例如,当使用parallel-http-request时,需要.add({在JS 代码中添加关键字,这将不支持动态URL 参数。

有没有其他方法可以完成这项任务?提前致谢。

标签: javascriptnode.jsasynchronoushttprequestrequest-promise

解决方案


使用Promise.all并将所有请求承诺包装在一个数组中。

 await Promise.all([
  request({
      url:'https://jsonplaceholder.typicode.com/posts/1', 
      method:'post',
  }),
  request({
      url:'https://jsonplaceholder.typicode.com/posts/2', 
      method:'post'
  }),
  request({
    url:'https://jsonplaceholder.typicode.com/posts/3', 
    method:'post'
  })
]);

此外,因为承诺有可能被拒绝。包装 atry-catch是必须的。

try {
  await Promise.all([
    request({
        url:'https://jsonplaceholder.typicode.com/posts/1', 
        method:'post',
    }),
    request({
        url:'https://jsonplaceholder.typicode.com/posts/2', 
        method:'post'
    }),
    request({
      url:'https://jsonplaceholder.typicode.com/posts/3', 
      method:'post'
    })
  ]);
} catch (e) { 
  // handle if any one of the request is failed
}


推荐阅读