'TypeScript Promise Series Execution
I've a list of doc objects and there is a need to make a API call for every doc id in the list and want to execute the API calls in a series fashion. Promise.all and Promise.allSelected executes them in a concurrent manner, in Typescript
[
{
"doc_id": 11
},
{
"doc_id": 22
},
{
"doc_id": 33
}
]
Thanks in advance
Solution 1:[1]
Promise.all and Promise.allSettled will wait for the promises asynchronously and simultaneously, but most API calls start the moment the Promise is created. Consequently, it wouldn't solve your problem to create all the promises at once and then simply await them one by one instead of using Promise.all: You need to defer their creation to happen one by one.
If you want to delay the API call for the second doc, you need to make sure you await the first response before creating the Promise for the second response. (pzaenger's answer does this well.) If you're using then and catch rather than await, you'll need to make sure that the second call to your API happens in the then handler of the first call, and the third in the second, and so forth.
There are also tools to handle the general "throttling" problem, which can ensure that only n unsettled promises coexist at once; doing API calls in sequence is merely the case where n = 1. You might prefer to use a fairly general throttling library here, since you might find it valuable in the future to handle a small finite number at once (n = 3) or throttle by time (e.g. 1 request per second). This would be difficult to implement if you rewrite your code to run serially, but easy to modify with a library.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Jeff Bowman |
