paritytech / polkadot-testnet-faucet

https://faucet.polkadot.io/
MIT License
32 stars 32 forks source link

Fixing "Invalid" Error II #407

Closed josepot closed 4 months ago

josepot commented 4 months ago

I probably did a bad job at explanning how shareReplay works, my apologies.

The thing is that every time that with shareReplay every time that its internal refCount goes down to zero, then it unsubscribes from the source.

Therefore, there must be a subscription always open for the observable to be "shared". This is because observables are not eager. What was happening is that every time the old code was performing a firstValueFrom that creates a subscription and when the condition is met (and the promise resolves) then it unsubscribes from the observable. Since that was its only subscription, then the refcount goes down to 0 and the observable dies. So, the next firstValueFrom creates a brand new subscription.

I realize that people coming from PJS may find Observables difficult to deal with. So, we will probably add an optional callback to the promise based functions so that you can introspect what's going on under the hood without having to learn how to work with observables.