I’m completely new to rxjs and trying to accomplish one task – essentially I need a Promise-like API with the following differences:
- Unlike the standard
Promise
my API should be able toresolve
multiple times. - When calling
await
/then
the last resolved value should be used. - If my API was never resolved the
await
/then
should hang, just like the standardPromise
. - Additionally I need a
reset
method which will be resetting my API object so the followingawait
/then
calls will hang like in the point 3.
How can I implement the needed behaviour? I think rxjs Observable
and lastValueFrom
is what I need, but I just can’t figure out how to use it.
Pseudocode example usage:
const myAuthObservable = new MyObservableApi<Auth>((resolve) =>
subscribe(
(s) => s.auth,
(auth) => {
if (auth) {
resolve(auth); // this can be called multiple times
}
}
)
);
emitter.on("start", async () => {
// always the last auth will be returned
// or the api will hang until the first auth is emitted
const auth = await myAuthObservable;
myAuthObservable.reset();
});