【问题标题】:rxjs debounceTime on Subject主题上的 rxjs debounceTime
【发布时间】:2018-09-15 13:21:17
【问题描述】:

有这样一段代码:

const hoverQueue$ = new Rx.Subject()
    .debounceTime(1000)
    .subscribe(() => {
        console.log('subject')
});

const callback = () => {
    hoverQueue$.next(true)
}

这似乎不起作用。而不是让我的事件被延迟 1 秒并且只获得最后一个发出的值,它们都像 debounceTime 不存在一样通过。延迟会发生相同的行为,似乎不起作用。 似乎在可观察对象上按预期工作。 callback 是我正在使用的另一个库调用的回调。

不确定我是否遗漏了什么或者我做了一些不应该做的事情,在网上找不到太多关于这个的信息。

下面有一个例子来演示一下

这是我正在运行的 rxjs 5.4.1 的小提琴 https://jsfiddle.net/theya222/2nhu1ka7/

这里是最新版本的 rxjs https://jsfiddle.net/theya222/j1uLw80d/

谢谢

【问题讨论】:

    标签: javascript rxjs rxjs5


    【解决方案1】:

    hoverQueue$ 是在 Observable 上执行 subscribe 的结果。因此hoverQueue$Subcription 而不是Observable 并且Subscription 没有next 方法。

    你要做的就是这个

    const subj = new Rx.Subject();
    const hoverQueue$ = subj.debounceTime(1000);
    
    hoverQueue$.subscribe(() => {
            console.log('subject')
    });
    
    const callback = () => {
        subj.next(true)
    }
    

    如果回调是一个

    另一个库调用的回调

    采取 看看bindCallback 用 Observable 定义的方法/函数。

    【讨论】:

    • debounceTime 应该再往下一点,否则hoverQueue$Observable 而不是Subject。打字稿万岁
    • @ggradnig 你是对的 - 答案已编辑 - 打字稿万岁
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多