第一个观察到 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]
我有 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]