Первый наблюдаемый возврат после второго у них разного таймаута - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть 2 наблюдаемые.

Этот метод возвращает наблюдаемую

const rxjs = require('rxjs');
const op = require('rxjs/operators');


const retornaObs = (arg, timeout) => {
    return rxjs.of(arg)
    .pipe(tap(res => {
        setTimeout(() => {
            console.log(res);
        }, timeout);
    }));
}

и вызывающих абонентов

retornaObs([1,2,3], 4000)
.pipe(op.switchMap(() => {
    return retornaObs([4,5,6], 2000);
})).subscribe()

Когда я это делаю, мой возврат [4,5,6], а затем [1,2,3], но мне нужен последовательный возврат.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Просто для упрощения

я меняю время ожидания на .pipe(op.delay(timeout))

и звоню

rxjs.concat(retornaObs([1,2,3], 4000), retornaObs([4,5,6], 2000)).subscribe();

результат равен [1,2,3]...[4,5,6]

1 голос
/ 27 февраля 2020

Существует оператор Rx JS с именем Concat , который, возможно, именно то, что вам нужно.

Взгляните на это здесь .

В вашем случае это будет примерно так:

concat(retornaObs([1,2,3], 4000), retornaObs([4,5,6], 2000))

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

...