RXJS zip zip (массивов) наблюдаемый не стреляет - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь получить результат из заархивированного массива самих наблюдаемых zips из массива простых наблюдаемых. Следующим образом:

a(x) {
    const observables = [of(x), of(x+1)];
    return zip(observables);
}

b() {
    const observables = [a(1), a(2)];
    return zip(observables);
}

Остальная часть кода работает нормально. На самом деле, когда внутренняя функция a () возвращает одну наблюдаемую (из массива объектов, конечно, чтобы отразить zip наблюдаемых), внешняя zip работает нормально. Тем не менее, когда используется внутренний почтовый индекс, код внутри внутреннего почтового индекса никогда не вызывается.

Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Что не так: zip([Obs1, Obs2]) - это не то же самое, что zip(Obs1, Obs2).

Но для перехода есть хитрость: ...argsArray[] заставляет массив действовать так, как если бы он был набором аргументов (например, эквивалент *args в python).

Кроме того, если вы обнаружите, что повторяющийся оператор of находится внутри итерируемого, то, возможно, вам стоит подумать об использовании оператора from.

function a(x) {
    const observables = from([x, x+1]);
    return zip(observables);
}

function b() {
    const observables = [a(1), a(2)];
    return zip(...observables);
}

Тест :

b().subscribe(val =>console.log(val))

[[1], [2]]

[[2], [3]]

Обычно у вас [1] вместо 1, потому что выходные данные zip возвращают массив, содержащий значения.

0 голосов
/ 04 ноября 2018

Сколько часов я потратил на эту проблему ..

Попытка:

zip(...observables);

Параметр должен быть расширен, иначе ваш массив будет обрабатываться как ObservableInput, что, вероятно, не является желаемым поведением.

Вы можете включить эту функцию как безопасный запасной вариант для вашего варианта использования:

export function zipArray<T>(array: ObservableInput<T>[]): Observable<T[]> {
    return array.length ? zip(...array) : of([]);
}

И назовите это так:

zipArray(observables)
...