rxjs可观察到的debounceTime内部下一个忽略

用户名

似乎debounceTime忽略对它的subjectnext方法的内部调用

var subject: Subject<number> = new Subject<number>();

subject.pipe(
    tap((a) => console.log("tab:" + a)), 
    debounceTime(300), 
).subscribe((a) => {
    console.log(a);
    subject.next(100)
});

subject.next(19);
subject.next(20);

上面的代码应该创建一个无限循环-但它不会:

tab:19
tab:20
20
tab:100

如果将a添加delay(1)到管道中,它将按预期工作:

subject.pipe(
    tap((a) => console.log("tab:" + a)), 
    debounceTime(300), 
    delay(1)
).subscribe((a) => {
    console.log(a);
    subject.next(100)
});

我错过了什么吗?

编辑:添加了一个示例:https : //typescript-fbt2mn.stackblitz.io

马丁

这种类型的问题似乎已经坏了,可以使用delay(0)setTimeout通常通过魔术解决,这意味着您期望RxJS始终保持异步运行,而实际上除非您另有规定,否则它通常是同步运行的。

这就是您的情况。

顺便说一句,一种更优雅的方法是将observeOn运算符与async调度程序一起使用,该调度程序应比delay(1)

import { async } from 'rxjs/scheduler/async';

var obs = Observable.of(1, 2, 3);
var subject: Subject<number> = new Subject<number>();

subject.pipe(
    tap((a) => console.log("tab:" + a)), 
    debounceTime(300),
    observeOn(async),
).subscribe((a) => {
    console.log(a);
    subject.next(a+1)
});

看到您更新的演示:https : //stackblitz.com/edit/typescript-tsek9s?file=index.ts

编辑:此行为可能已在RxJS 6中更改:https : //github.com/ReactiveX/rxjs/pull/3218

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

RxJs可观察到而没有下一个事件?

将一个可观察到的RxJS结果传递到下一个可观察到的序列中

可观察的订阅-忽略下一个方法

将外部和内部可观察到的结果组合为单个参数(数组)以用于下一个地图方法

可观察到的在angular2中不接收下一个值

当另一个发出值时,可观察到RxJS错误

在RxJs和Angular中测试可观察的“下一个”回调

RxJava可观察到的最后一个状态

等到下一个可观察的订阅

将MergeMap与从另一个可观察到的数据数组一起使用-RxJs Angular

RXJS首先发出结果,然后等待另一个可观察到的结果

rxjs:结合可观察到的结果,同时已经使用异步管道显示了第一个

RxJS 在不为人知的情况下持有可观察的和下一个最新的值

RxJS结合两个可观察到的

RxJs数组可观察到的数组

rxjs可观察到的更改间隔

rxjs可观察到的导入问题

RxJs可观察到的重复值

如何在另一个可观察对象内部解析一个可观察对象?-rxjs

Angular / RxJS-将一个诺言和内部可观察转换为一个可观察的返回

创建一个可观察到的所有值

从可观察到的淘汰赛中删除最后一个角色

退订可观察到的一个标签会禁用所有标签吗?

与onExceptionResumeNext的混淆传递了一个可观察到的lambda表达式

RxJava:等待另一个可观察到的结果

将可观察到的嵌套对象映射到另一个对象

可观察到的第一个元素的特殊处理

RxSwift:返回一个新的可观察到的错误

在Redux可观察到的史诗中的所有动作之后触发一个动作