javascript - 如何在 Node JS 中使用动态 URL 进行一系列并行(异步)API 请求
问题描述
如何在 Node JS 中异步调用 HTTP 请求。我有以下3个主要挑战。
- 需要异步调用。
- 请求 URL 是动态的。
- 避免使用循环。
以下方法用于调用单个端点。
const options = {
method: 'POST',
uri: "http://api.example.com"
}
常量响应 = 等待请求(选项);
为了异步调用,我使用了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 参数。
有没有其他方法可以完成这项任务?提前致谢。
解决方案
使用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
}
推荐阅读
- c# - 如何将数据从 WCF 服务中的订阅者推送到另一个控制台应用程序?
- javascript - 如何使用时刻按小时比较时间戳
- sql-server - 如何使用动态 SQL 语句正确编码数据透视?
- ruby-on-rails - Rails API 应用程序忽略 Accept-Language 标头值
- assembly - 如何使用 Ollydbg 在游戏中查找地址
- android - 颤振 - 布局
- python - 如何正确查询/格式化日期
- performance - 如何优化 Cortex-M3 的滤波器循环?
- testing - 我正在努力测试这个 redux 传奇
- php - openssl_decrypt 和 aes-256-gcm 似乎不起作用