gpt4 book ai didi

rxjs observable debounceTime inner next 被忽略

转载 作者:行者123 更新时间:2023-12-05 00:55:39 25 4
gpt4 key购买 nike

debounceTime 似乎忽略了对其主题 next 方法的内部调用:

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

如果我将 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

关于rxjs observable debounceTime inner next 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50001050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com