The Future And Promise Revisited
A future and a promise are two halves of a single one shot channel for a value that does not exist yet. The split lets a producer and a consumer be decoupled in time.
The promise is the writable side held by the producer. When the work finishes, the producer fulfills the promise with a value, or rejects it with an error.
The future is the readable side held by the consumer. It starts unresolved. The consumer can attach a callback or await it, and once the promise is fulfilled the future delivers the value exactly once.
- One shot A future resolves a single time, then stays resolved forever.
- Decoupled The producer need not know who waits, and waiters need not exist when the work starts.
- Composable Futures chain, so the output of one becomes the input of the next without manual callback nesting.
This separation is why the pattern scales. The promise side stays inside the library doing the work, while the future side is the clean handle handed to callers. Many languages collapse both into one object, but the conceptual two ended channel is what makes the model sound.
Key idea
A promise is the writable producer end and a future is the readable consumer end of one channel that carries a deferred value exactly once.