Coroutines: promises and futures
Note!
This is another example of M:N threading. Many tasks can run concurrently on one OS thread. Each task is represented as a state machine.
Promises in JavaScript and futures in Rust are two different implementations that are based on the same idea.
There are differences between different implementations, but we’ll not focus on those here. It’s worth explaining promises a bit since they’re widely known due to their use in JavaScript. Promises also have a lot in common with Rust’s futures.
First of all, many languages have a concept of promises, but I’ll use the one from JavaScript in the following examples.
Promises are one way to deal with the complexity that comes with a callback-based approach.
Instead of:
setTimer(200, () => { setTimer(100, () => { setTimer(50, () => { console.log("I'm the last one...