gpt4 book ai didi

typescript - RXJS 错误后继续 concat 订阅

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:14 26 4
gpt4 key购买 nike

我有一组需要按顺序触发的可观察对象。一旦发生错误,我需要捕获错误、记录它并继续观察。

此刻,一旦发生错误,观察者就会停止。观察者必须继续并且不会在出现错误时重新启动或完成,这一点很重要。

import * as Rx from "rxjs";
const source = [
Rx.Observable.from("1").delay(200),
Rx.Observable.from("2").delay(150),
Rx.Observable.throw("error"),
Rx.Observable.from("3").delay(124),
Rx.Observable.from("4").delay(201),
];
let sSource = Rx.Observable.concat(...source);
sSource.subscribe((v) => {console.log(v)}, (e) => {console.log(e)});

当前输出:

1
2
error

预期输出:

1
2
error
3
4

我们能想到的唯一解决方案是预循环 source observables 并分别向它们添加 catch 处理程序,然后一旦发生错误,它就会得到正确处理,观察者可以继续没有完成整个串联的可观察对象。

我们觉得应该有一个更优雅的解决方案。如果需要,我会发布我们目前拥有的解决方案。

最佳答案

您可以将 catch 运算符应用于每个源可观察对象,并可以在其中执行错误记录。像这样:

const sources = [
Rx.Observable.from("1").delay(200),
Rx.Observable.from("2").delay(150),
Rx.Observable.throw("error"),
Rx.Observable.from("3").delay(124),
Rx.Observable.from("4").delay(201),
];
const sourcesWithCatch = sources.map(s => s.catch(e => {
console.log(e);
return Rx.Observable.empty();
}));
const concatted = Rx.Observable.concat(...sourcesWithCatch);
concatted.subscribe(v => console.log(v));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>

关于typescript - RXJS 错误后继续 concat 订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50957701/

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