Создать Observable, который ведет себя как CombineLatest, но выдает только значение источника, который только что сработал - PullRequest
0 голосов
/ 06 июня 2018

Я хотел бы создать наблюдаемую систему, которая будет принимать N наблюдаемых источников и преобразовывать их с помощью N-арной функции.OnNext () этой наблюдаемой будет вызывать эту функцию всякий раз, когда одна из исходных наблюдаемых создает элемент, например так: f (null, null, null, o3.val, null, null) где o3 - источник, который только что выпустил значение.

Похоже на combLatest, где f вызывается с последними значениями из всех источников, объединенных вместе, но здесь в f мы получаем нулевое значение для всех остальных.

Телоf может действовать как переключатель:

 function f(v1,v2,...vn) {
        if (v1) { ... }
        else if(v2) { ... }
    }

Возможно ли это?Есть и другие способы для достижения этой цели?

1 Ответ

0 голосов
/ 06 июня 2018

Возможно, вы захотите подумать о чем-то подобном

const obsS1 = obsSource1.pipe(map(data => [data, 'o1']));
const obsS2 = obsSource2.pipe(map(data => [data, 'o2']));
....
const obsSN = obsSourceN.pipe(map(data => [data, 'oN']));

merge(obs1, obs2, ..., obsN)
.subscribe(
  dataObs => {
    // do what you need to do
    // dataObs[0] contains the value emitted by the source Observable
    // dataObs[1] contains the identifier of the source Observable which emitted last
  }
)
...