gpt4 book ai didi

javascript - RxJS 展开在一定数量的调用后不会完成。它有限制吗?

转载 作者:行者123 更新时间:2023-12-05 03:18:53 25 4
gpt4 key购买 nike

我尝试从一个数字开始倒数,比方说 8000,然后我将所有值reduce 到一个数组中。如果我倒数 100、50 甚至 10,expand 完成并且我可以在控制台中看到数组,但如果我倒数 1 (step = 1) ,它只是停在某个数字,什么都不做,不会继续,不会完成。控制台没有错误。

谁知道这是怎么回事? expand 是否有递归调用的限制?

const fromValue = 8000;
const step = 1; // Change this value to 1, 10, 100...

rxjs.of(fromValue).pipe(
rxjs.expand(value => {
console.log(value);
return value > 0 ? rxjs.of(value - step) : rxjs.EMPTY;
}),
rxjs.reduce((acc, value) => [...acc, value], [])
).subscribe(result => console.log(result));
<script  src="https://unpkg.com/rxjs@7.5.6/dist/bundles/rxjs.umd.min.js"></script>

最佳答案

我认为这可能是因为您达到了最大堆栈跟踪大小,但我对此不是 100% 确定,因为它不会引发任何错误。

解决此问题的一种方法是使用 observeOn(queueScheduler),这样 next 通知将一个接一个地发出,并且不会创建越来越多的嵌套调用。

import { of, EMPTY, expand, reduce, queueScheduler, observeOn } from 'rxjs';

const fromValue = 8000;
const step = 1;

of(fromValue).pipe(
expand(value => {
console.log(value);
return value > 0 ? of(value - step).pipe(observeOn(queueScheduler)) : EMPTY;
}),
reduce((acc, value) => [...acc, value], [])
)
.subscribe(result => console.log(result));

现场演示:https://stackblitz.com/edit/rxjs-wnuulh?devtoolsheight=60&file=index.ts

关于javascript - RxJS 展开在一定数量的调用后不会完成。它有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73584489/

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