第一个观察到 return 第二个之后他们有不同的超时

Fisrt observable return after the second they have different timeouts

我有 2 个可观察对象。

这是 return observable

的方法
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()

当我这样做时,我的 return 是 [4,5,6],然后是 [1,2,3],但我需要顺序 return。

有一个名为 Concat 的 RxJS 运算符,也许正是您所需要的。

看看here

在你的情况下它会是这样的:

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

但是请注意,为了订阅第二个可观察对象,第一个需要完成。

只是为了简化

我将超时更改为 .pipe(op.delay(timeout))

并致电

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

结果是[1,2,3]...[4,5,6]