RxJS Все индивидуальные наблюдаемые завершены - PullRequest
0 голосов
/ 31 октября 2018

У меня есть массив уникальных идентификаторов, и я хочу выполнить над ними массовое действие (исправление HTTP, удаление и т. Д.). Это должно быть сделано индивидуально, и мне нужно отобразить отдельные результаты.

Поскольку запросы индивидуальны и их ответы не должны влиять друг на друга. Результаты отображаются по мере их поступления.

Каждый вызов - это отдельная Наблюдаемая, и то, что я ищу, это способ узнать, когда все Наблюдаемые завершили . Метод 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 голосов
/ 31 октября 2018

Вы можете эмулировать это с помощью 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!
...