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

  1. takes 2 seconds,
  2. takes 1 second
  3. 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.

Most posts are for my own reference and reflection, and shouldn’t be taken as fully accurate or instructional.