error-handling - 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
什么?
解决方案
我觉得有两个问题:
调用
unsubscribe()
不会做任何事情,因为订阅时会立即of(true)
发送next
和通知。complete
因此,当您打电话给unsubscribe()
自己时,您已经因为complete
通知而取消订阅。那么unsubscribe()
在这种情况下,实际的调用不会做任何事情。当你标记一个方法时,
async
这意味着你实际上返回了一个被拒绝的 Promise。但是.finally
期待一个它调用的函数并且对它的返回值不做任何事情。当你将它标记为async
它返回一个 Promise 但没有人听它时。
推荐阅读
- python - 在 C++ 中使用 python 函数时访问冲突
- google-api - 尝试下载 Google Play 应用报告时如何解决权限被拒绝的问题?
- javascript - 在更新元素的类名时,为什么需要“this”关键字?
- testing - Azure DevOps - 在报告中连接测试用例和测试运行
- powerbi - 在折线图上显示整个部门的平均百分比和个人的平均百分比
- google-apps-script - 这是否会使我超出 Google 电子表格 API 调用配额的风险?
- reactjs - 如何访问饼图中的数据?
- java - 如果 BPM Camunda 中的活动崩溃,流程变量会被保存吗?
- view - 初始化 Prism 应用程序期间的 DataGrid AutoGeneratingColumn 问题
- javascript - Wsy 这个箭头函数不适用于“arguments.length”吗?