【发布时间】:2020-07-02 03:16:39
【问题描述】:
在 Rxjs 中,有管道 takeUntil,但没有管道 wait Until,这使得当前的 observable 等待seconde Observable 发射。
我的最终目标是让许多 Observable 仍在等待,直到我的 Observable init$ 只发出一个值,才能继续执行。所以我的 Observable init$ 必须执行一次,在此之前我的其他 observable 必须等到 inits 发出任何不同于 null 的值。
在这个简单的例子中,我想添加一个管道到 pipedSource 做 wait Until init$ ,所以源必须等到init$ 发出来发出它的值。
import { interval, timer, Subject, combineLatest } from 'rxjs';
import { takeUntil, skipWhile, skipUntil, concatMap, map, take } from 'rxjs/operators';
import { BehaviorSubject } from 'rxjs';
const init$ = new BehaviorSubject(null);
const source = new BehaviorSubject(null);
const pipedSource = source
.pipe(
skipWhile((res)=> res === null)
//wait until init$ emits a non null value
)
//first subscription to source
pipedSource.subscribe(val => console.log(val));
source.next({profile:"me"});
//init emits once
setTimeout(()=>{
init$.next(1);
},2000);
// a second subscription to source
setTimeout(()=>{
pipedSource.subscribe(val => console.log(val));
},3000);
想要的结果:
//after 2s of waiting
//first subscription returns "profile"
//after 3s
//second subscription returns "profile"
【问题讨论】:
-
所以你想跳过直到?
-
第一个obs,被订阅了。当订阅中发生正确的事情时,会发出另一个事件。订阅该事件的任何人只会在第一件事完成后收到通知。
标签: angular rxjs angular8 rxjs6 angular9