Option 4 - Ditch promises and just use Observables! (This author’s totally biased choice)
Okay, this isn’t an answer, but if you’re already using Observables, you could just use an observable, it’s not that much different from a promise, other than it’s lazy, it’s built to handle more than one value if needed, and it’s cancellable.