Although promises and observables are both used in JavaScript to manage asynchronous requests, they operate in fundamentally distinct ways. Promises can only manage one asynchronous event at a time, but observables can handle several asynchronous events over time. Observables also give us a diverse set of operators that make it simple to alter data passing through them.
A promise is simply a way to wrap asynchronous operations so that they can be used more easily, whereas an observable is a way to turn asynchronous operations into a stream of data that flows from a publisher to a subscriber along a well-defined path with multiple operations that transform the data along the way.