Rxjs 改变流数据上的去BounceTime
这个愚蠢的问题把我难住了。我想根据流中的数据给出不同的去BounceTime。我有:Rxjs 改变流数据上的去BounceTime,rxjs,rxjs5,Rxjs,Rxjs5,这个愚蠢的问题把我难住了。我想根据流中的数据给出不同的去BounceTime。我有: const fakeData = [{number: 1}, {number: 2}, {number: 3}]; const stream$ = Rx.Observable.from(fakeData); const delayedStream$ = stream$.concatMap(x => Rx.Observable.of(x).delay(300)); delayedStream$ .co
const fakeData = [{number: 1}, {number: 2}, {number: 3}];
const stream$ = Rx.Observable.from(fakeData);
const delayedStream$ = stream$.concatMap(x => Rx.Observable.of(x).delay(300));
delayedStream$
.concatMap(x => x.number >=2
? Rx.Observable.of(x).debounceTime(500)
: Rx.Observable.of(x).debounceTime(1000)
)
.subscribe(x => console.log(x));
// expected output: 3
// actual output: 1 ... 2 ... 3 |
上面的代码只返回x,不带去盎司。但是如果我用延迟来代替去BounceTime,那么延迟就像预期的那样工作。很明显,我在两个操作符之间遗漏了一些基本的东西。我已经看过文件了,现在还没拿到
谢谢你的帮助 我无法用您的实际用例测试这一点,但您没有正确使用
debounceTime
操作员debounceTime
仅对该可观察流及其数据应用去盎司。由于您正在链接concatMap
,并使用debounceTime
返回可观察对象,concat将始终等待可观察对象完成。所以它总是返回所有三个值
您可以使用debounce()
const fakeData = [{number: 1}, {number: 2}, {number: 3}];
const stream$ = Rx.Observable.from(fakeData);
const delayedStream$ = stream$.concatMap(x => Rx.Observable.of(x).delay(300));
delayedStream$
.debounce(val => Rx.Observable.of(true).delay(val >= 2 ? 500 : 1000))
.subscribe(x => console.log(x.number));
见现场演示:
这只会发出:3
更新:由于RxJS 5.5+相同的技术可以像这样进行重组:
const fakeData = [{number: 1}, {number: 2}, {number: 3}];
const stream$ = from(fakeData);
const delayedStream$ = stream$.pipe(concatMap(x => of(x).pipe(delay(300))));
delayedStream$.pipe(
debounce(val => of(true).pipe(delay(val >= 2 ? 500 : 1000)))
subscribe(x => console.log(x.number))
);
如果将debounceTime
替换为delay
,它仍然会返回所有三个数字,而不仅仅是3
,感谢您向我展示了我的错误方法,并解释了它不起作用的原因。有道理。您的解决方案非常有效。谢谢你的时间和帮助!