我有一個ReplaySubject(2)
的解決方案,「消耗」序列以獲得最新的元素,如果序列是空的,只需要最後一個元素,但它很麻煩並且不能很好地擴展(例如,如果您決定將重播大小增加到3)。然後我記得,重播/行爲主題在管道傳輸時往往很難管理。以最簡單的解決方案是創建(而不是通過轉化/操作上的ReplaySubject創建它的)一個「陰影」序列和管您ReplaySubject進去,因此:
var subject$ = new Rx.ReplaySubject(3);
var lastValue$ = new Rx.ReplaySubject(1);
subject$.subscribe(lastValue$); // short hand for subject$.subscribe(v => lastValue$.next(v))
lastValue$.take(1).toPromise().then(...);
======== ==舊的解決方案,而忽略ReplaySubject(2)=================
閱讀下面的評論後,正確的代碼是:
Rx.Observable.combineLatest(possiblyReplayedIncomplteObservable).take(1).subscribe(...)
而不是
Rx.Observable.combineLatest(possiblyReplayedIncomplteObservable).subscribe(...)
這是由於承諾是「一次」可觀察的事實。我認爲toPromise()
代碼只有在完成時才解析結果。
take(1)
不會影響您的原始流,因爲它在由combineLatest
創建的新流上操作。
而實際上,最簡單的方法是:
possiblyReplayedIncomplteObservable.take(1).toPromise().then(...)
難道你們就不能使用其他重播觀察的 - 使用相同的源 - 有一個重播的價值,而不是N個值?那是你正在尋找的行爲,對吧? – cartant