rxjs-最后处理异步错误

时间:2018-06-28 08:02:49

标签: error-handling promise rxjs

当我取消订阅可观察对象时,我有兴趣调用异步函数,但是,一旦取消订阅,我将无法以同步方式处理错误,例如,我有以下代码,并且错误是没抓住。

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中处理异步错误的可能方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为有两个问题:

  1. 调用greetings.res.lang 不会执行任何操作,因为unsubscribe()会在订阅后立即发送of(true)next通知。因此,当您自己致电complete时,由于unsubscribe()的通知,您已经被取消订阅。然后,在这种情况下,实际的呼叫complete将无济于事。

  2. 将方法标记为unsubscribe()时,这实际上意味着您返回的Promise被拒绝。但是async期望它会调用一个函数,并且对其返回值不执行任何操作。当您将其标记为.finally时,它会返回一个Promise,但没有人听。

答案 1 :(得分:0)

如果您想捕获错误,则必须删除async关键字

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

具有异步功能,它将把它变成一个异步功能,不会被捕获。您现在正在做什么类似于

    try {        
        setTimeout(()=> {throw new Error('what');},10)
    } catch (e) {
        console.log('We did not capture this');
    }

在事件循环中而不是在主线程中抛出异常。