首页 > 解决方案 > rxjs - 在 finally 中处理异步错误

问题描述

我有兴趣在取消订阅 observable 时调用异步函数,但是,一旦取消订阅,我就无法以同步方式处理错误,例如我有以下代码,并且错误没有被捕获.

const observable = Observable.of(true).finally( async () => {
            throw new Error('what');
        });

        try {
            observable.subscribe().unsubscribe();
        } catch (e) {
            console.log('We did not capture this');
        }

处理异步错误的可能方法是finally什么?

标签: error-handlingpromiserxjs

解决方案


我觉得有两个问题:

  1. 调用unsubscribe()不会做任何事情,因为订阅时会立即of(true)发送next和通知。complete因此,当您打电话给unsubscribe()自己时,您已经因为complete通知而取消订阅。那么unsubscribe()在这种情况下,实际的调用不会做任何事情。

  2. 当你标记一个方法时,async这意味着你实际上返回了一个被拒绝的 Promise。但是.finally期待一个它调用的函数并且对它的返回值不做任何事情。当你将它标记为async它返回一个 Promise 但没有人听它时。


推荐阅读