我有一个唯一ID数组,想对它们执行批量操作(HTTP补丁,删除等)。这需要单独完成,而我需要显示单独的结果。
由于请求是单独的,因此其响应不应相互影响。结果按收到时显示。
每个调用都是一个单独的Observable,而我正在寻找的是一种了解所有Observables何时完成的方法。
onCompleted
方法仅在没有错误的情况下有效。
目的是防止在仍在处理呼叫的情况下单击按钮。
this.inProgress = {};
this.myIdArray = [1, 2, 3, 4];
actionHandler(type) {
this.inProgress[type] = true;
const myAction = {
patch : id => this.patch(id, this.body),
delete : id => this.delete(id)
};
from(myIdArray)
.pipe (
tap(myAction[type])
)
.subscribe(
res => {},
err => {},
() => this.inProgress[type] = false ); // onCompleted
}
delete(id) {
this.myService.delete(id).subscribe(
res => {} // confirm
err => {} // show error
);
}
答案 0 :(得分:0)
您可以使用forkJoin来模拟:
var load = [1, 2, 3, 4].map(id => this.delete(id)); //Observable<T>[]
//do something when each Observable completes
load.forEach(o$ => o$.subscribe(resp => console.log(resp)));
//do something when ALL observables are complete
this.disableButton = true;
forkJoin(load).subscribe(() => this.disableButton = false);//all done!