gpt4 book ai didi

javascript - 进一步点击会发生什么

转载 作者:行者123 更新时间:2023-12-03 04:59:56 24 4
gpt4 key购买 nike

当计数器达到 5 时,我有一个会抛出错误的可观察对象:

let counter = 0;

const source2 = Rx.Observable.of(true)
.map(() => [1,2,3,4,5]);

source2
.subscribe((x) => console.log(x),
(err) => console.log(err),
() => console.log("complete 2!!"));


const source1 = Rx.Observable.fromEvent(document, 'click')
.do(() => console.log("Document clicked!"))
.do(() => counter++)
.map(() => {

if(counter > 5) {
counter = 0;
throw new Error("Counter is too big!");
}

return true;

})
.catch((oError, oSource$) => source2)


source1
.subscribe((x) => console.log(x),
(err) => console.log(err),
() => console.log("complete!!"));

当错误发生时,它将切换到source2,如上面的代码所示。

当我进一步点击文档时,没有任何反应,为什么?进一步点击会发生什么?

最佳答案

这是基本的 rxjs 范式之一:每当流中抛出错误时(无论是直接的 throw new Error(..) 还是 Observable.throw (...))订阅的流将自动最终确定并且订阅者将取消订阅。

因此该行为是预期的。

要在您的个人情况下解决此问题:如果您不希望流媒体停止并且除非您想手动重新订阅,则不要抛出错误。

添加:catch-operator只允许对流中的错误使用react,独立于任何订阅者 - 尽管流本身仍将最终确定 - 名称 catch 在这里给人一种错误的印象。 - 您可以通过在 catch 运算符中返回原始源来“重试”可观察对象,这将有效地基于该源(即旧流)创建一个新流,仍待最终确定。

关于javascript - 进一步点击会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42273859/

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