【问题标题】:rxjs switchMap onerror behaviorrxjs switchMap onerror 行为
【发布时间】:2017-04-14 21:46:01
【问题描述】:

我对 rxjs Observable 中的 switchMap 感到困惑:

例如我有下一个代码:

Observable.fromEvent(button, 'click') .switchMap(() => Observable.fromPromise(fetch('http://return-error.com'))) .subscribe( (response) => { console.log(response); }, (error) => { console.log(error); } ); 如果我从 fetch 中得到错误,订阅就会中断。那么有没有办法处理它以不为任何错误创建新订阅?

我什至尝试过捕获错误并返回 Observable,但订阅还是被中断了。

upd:如何处理 angular 2 http.get 而不是 fetch?

【问题讨论】:

    标签: rxjs reactive-programming observable angular2-http onerror


    【解决方案1】:

    在提出这些问题时,如果您制作一个 Bin 总是会更有帮助。我为你做了这个。

    您只需要吞下 fetch 调用中的错误。例如

    fetch('bad-url').catch(err => 'Error but keep going')

    这是演示。单击文档(输出)以触发事件。

    http://jsbin.com/vavugakere/edit?js,console,output

    (您需要一个带有本机 Fetch 实现的浏览器,否则会抛出错误)

    【讨论】:

    • 谢谢,它确实有效。你知道在 angular 2 http.get 而不是 fetch 的情况下如何处理吗?
    • @MikhailLinkov 我很高兴它有帮助!我是一个 React 人,也喜欢 RxJS。我不知道 Angular 的方法。但是如果http.get 返回一个promise,你可以用catch 来处理它。如果它返回可观察到的错误,则根据您的需要有不同的处理方法。
    • Angular 2 http 返回 observable,第一种方式是调用 toPromise,但你说这有不同的方式,第二种方式是重新订阅)我也很想知道它是 bug 还是具有 switchMap 的这种行为错误,因为onError之后没有调用onComplete回调
    • 好像我明白了,我们需要通过将其转换为 Observable 来停止在 switchMap 中传播错误。但是 switchMap 的这种行为仍然不直观,我也没有在某处找到它的描述。谢谢@D。沃尔什再次
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    相关资源
    最近更新 更多