Angular 当用户调用API时,构建观察值数组,并在所有解析时执行块
我想在用户与页面交互时建立一个观察列表。每个observable都是单独订阅的,但我希望在进行单独或多个并发API调用后调用另一个函数 我让每个函数将一个可观测值推送到一个数组中,并且在我的ngOnInit中有一个forkJoin和对该数组的订阅,但这只触发一次。如何创建一个实时订阅,在所有当前API调用返回后执行回调函数,并在用户继续进行API调用时继续执行回调函数 例如,用户单击“创建东西”,然后什么也不做Angular 当用户调用API时,构建观察值数组,并在所有解析时执行块,angular,typescript,rxjs,Angular,Typescript,Rxjs,我想在用户与页面交互时建立一个观察列表。每个observable都是单独订阅的,但我希望在进行单独或多个并发API调用后调用另一个函数 我让每个函数将一个可观测值推送到一个数组中,并且在我的ngOnInit中有一个forkJoin和对该数组的订阅,但这只触发一次。如何创建一个实时订阅,在所有当前API调用返回后执行回调函数,并在用户继续进行API调用时继续执行回调函数 例如,用户单击“创建东西”,然后什么也不做 forkJoin(thingsInProgress).subscribe(() =&
forkJoin(thingsInProgress).subscribe(() => doStuffWhenAllResolve())
...
createThing() {
const = this.thingService.createThing().pipe(tap(() => doStuff()));
thingsInProgress.push(createThing$);
createThing$.subscribe();
}
deleteThing() {
...
}
updateThing() {
...
}
我要启动doStuff()
,然后启动doStuffWhenAllResolve()
。或者,如果用户在毫秒内依次单击“创建对象”、“删除对象”、“更新对象”,则会对每个对象调用一次doStuff()
(例如),doStuffWhenAllResolve()
然后,如果用户真的很快地创建了10个以上的东西,那么在所有重叠的API调用返回后,将再次调用doStuffWhenAllResolve()
我在这里寻找什么RXJS操作符?我将创建一个
行为子对象
,其中createThing()
,deletThing()
,和updateThing()
分别发出并与去BounceTime
耦合
大概是这样的:
actionMade$ = new BehaviourSubject(new Date());
this.actionMade$.pipe(
debounceTime(100), // Up to you to play with this 100, basically how long in ms does it have
// to wait before accepting a new actionMade$
switchMap(() => forkJoin(thingsInProgress)),
).subscribe(() => doStuffWhenAllResolve());
createThing() {
...
this.actionMade$.next(new Date());
}
deleteThing() {
...
this.actionMade$.next(new Date());
}
updateThing() {
...
this.actionMade$.next(new Date());
}
ngOnDestroy() {
this.actionMade$.complete();
}
====================================================
请务必取消订阅(使用sub.unsubscribe或takeUntil),否则会导致内存泄漏。谢谢您的回复。让我看看我是否明白。所以,我正在创建一个可观察的日期,并在每个.next()之后等待100毫秒,以查看是否有一个新的.next()出现?当时间流逝时,将触发订阅?如果是这样,开关映射的功能是什么?在那一点上我还需要一组可观测数据吗?基本上,在连续的
actionMade$
之间,去BounceTime会等待100毫秒。因此,如果用户单击deleteThing
,然后在50ms
之后,单击updateThing
,则什么都不做,来自deleteithing
的发射被忽略,而updateThing
的发射被接受。SwitchMap切换到不同的可观察对象(将其视为将档位切换到其他位置)。这样,actionMade$
将成为主侦听器,好的,我们将actionMade$=>切换到此数组的forkJoin(这样forkJoin将始终是新的)。