Promises in Three Languages
January 19, 2025
note-to-self
Three ways to handle concurrent API requests that resolve when all are done, but can run concurrently.
In other words, if you have three requests and
- takes 2 seconds,
- takes 1 second
- takes 2 seconds
They should return together in 2 seconds, not five.
PHP:
React\Promise\all([$promise1, $promise2])->then(function ($results) {
// $results is an array of the resolved values from all promises
});
Javascript:
Promise.all([promise1, promise2]).then((results) => {
// results is an array of the resolved values from all promises
});
Python:
results = await asyncio.gather(task1(), task2())
Each of those (all, all, gather) return a new promise that resolves when everything in it (it == all, all, or gather) is finished/resolved.
Then, you have the result of all three and can move on to the next step. You could also do them one by one, but it would take longer.