Ответ 1
Rx предлагает оба поведения (как и другие).
различные объекты Rx могут позволить вам исследовать различные способы, с помощью которых можно наблюдать наблюдаемые:
-
Rx.Subject
- это самый простой вариант с огнем и забытьем - если вы не были подписаны, когда произошло событие, вы его не увидите. -
Используйте
new Rx.BehaviorSubject(undefined)
вместоSubject
, и вы получите поведение, которое вы искали, посколькуBehaviorSubject
представляет "значение, которое может меняться" -
Используйте
new Rx.ReplaySubject(5)
, и вы получите 5 самых последних значений сразу после подписания -
Используйте
new Rx.AsyncSubject()
, и вы ничего не получите до тех пор, пока наблюдаемое не завершится, и в это время вы получите окончательное значение (и продолжите получать окончательное значение, если вы снова подписались). Это истинный Rx-аналог Promises, поскольку он ничего не производит, пока не "разрешится" (т.е. Не завершится), а затем всегда дает значение любому, кто подписывается.