RxJS所有个人可观测值均已完成

时间:2018-10-31 16:30:10

标签: angular rxjs observable reactive-programming rxjs6

我有一个唯一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
    );
}

1 个答案:

答案 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!