TypeScript Promise 系列执行
TypeScript Promise Series Execution
我有一个文档对象列表,需要对列表中的每个文档 ID 进行 API 调用,并希望以一系列方式执行 API 调用。 Promise.all 和 Promise.allSelected 在 Typescript 中以并发方式执行它们
[
{
"doc_id": 11
},
{
"doc_id": 22
},
{
"doc_id": 33
}
]
提前致谢
遍历您的数组,此处:documents
类型 Array<{ doc_id: number }>
,以按给定顺序执行它们:
for (const document of documents) {
const response = await callApi(document['doc_id']);
// do someting with response
// or call just await callApi(document['doc_id']);
}
Promise.all 和 Promise.allSettled 将异步并同时等待承诺,但是 大多数 API 调用在承诺创建的那一刻开始.因此,一次创建所有 promise 然后简单地 await
一个一个地创建它们而不是使用 Promise.all 并不能解决你的问题:你需要推迟它们的创建一个一个地发生。
如果您想延迟对第二个文档的 API 调用,您需要确保在为第二个响应创建 Promise 之前 await
第一个响应。 ( 做得很好。)如果您使用 then
和 catch
而不是 await
,您需要确保第二次调用 API 发生在第一个调用的 then
处理程序中,第三个发生在第二个调用的处理程序中,依此类推。
也有处理一般的工具,可以保证一次只有n个未结算的promises共存;按顺序执行 API 调用只是 n = 1 的情况。你可能更喜欢在这里使用一个相当通用的节流库,因为你可能会发现在未来一次处理一个小的有限数字(n = 3)或按时间节流(例如每秒 1 个请求)。如果您将代码重写为 运行 串行,这将很难实现,但很容易使用库进行修改。
我有一个文档对象列表,需要对列表中的每个文档 ID 进行 API 调用,并希望以一系列方式执行 API 调用。 Promise.all 和 Promise.allSelected 在 Typescript 中以并发方式执行它们
[
{
"doc_id": 11
},
{
"doc_id": 22
},
{
"doc_id": 33
}
]
提前致谢
遍历您的数组,此处:documents
类型 Array<{ doc_id: number }>
,以按给定顺序执行它们:
for (const document of documents) {
const response = await callApi(document['doc_id']);
// do someting with response
// or call just await callApi(document['doc_id']);
}
Promise.all 和 Promise.allSettled 将异步并同时等待承诺,但是 大多数 API 调用在承诺创建的那一刻开始.因此,一次创建所有 promise 然后简单地 await
一个一个地创建它们而不是使用 Promise.all 并不能解决你的问题:你需要推迟它们的创建一个一个地发生。
如果您想延迟对第二个文档的 API 调用,您需要确保在为第二个响应创建 Promise 之前 await
第一个响应。 (then
和 catch
而不是 await
,您需要确保第二次调用 API 发生在第一个调用的 then
处理程序中,第三个发生在第二个调用的处理程序中,依此类推。
也有处理一般