【发布时间】:2019-02-21 09:32:14
【问题描述】:
我想在 observable 的 unsubscribe 函数中异步处理资源。例如:
// rxjs 6
let observable = Observable.create(sub => {
let resource = new Resource();
return {
async unsubscribe() {
await resource.dispose();
}
}
};
问题在于,因为unsubscribe 函数不应该返回Promise,所以不会等待它,所以unsubscribe 函数将在资源被完全处置之前“过早”。这可能会导致在处理资源时不应发生的行为。
我该如何处理?
【问题讨论】:
-
哪些行为可能发生而“不应该发生”?一旦您
unsubscribe订阅,您就无法再对该订阅进行任何操作。那么您可能会让create返回的“拆卸功能”花时间处理资源。如果我误解了你的意思,请道歉。 -
@Picci 订阅结束后,创建新资源或销毁依赖资源(使用 rxjs 运算符)的逻辑可以在现有资源仍在处理时执行。稍后我会添加一个代码示例。
-
无法收到取消订阅拆卸中的异步操作已完成的确认。这意味着在创建资源时需要执行任何等待。您应该创建一个知道您的 can-create-while-disposing 约束的工厂。在任何情况下,即使可以通知拆卸中的异步操作已完成,调用者仍然可能违反您的多次订阅约束。所以我认为最好使用防止创建多个资源等的工厂来表示这一点。
-
在GitHub查看随后的讨论/功能建议。
标签: javascript rxjs rxjs6