【发布时间】:2020-08-25 16:27:51
【问题描述】:
有时需要订阅组件,而不是使用异步管道。
在这种情况下,当 observable 只会发出一个值时,转换为 Promise 是否有任何理由或不利因素?既然我们没有订阅,如果有人不取消订阅,这不是比可能发生内存泄漏更安全吗?
【问题讨论】:
-
如果你是 observable 只发出一个且只有一个值,那么它将完成,在这种情况下,你不需要取消订阅。您也可以使用“first”运算符获取第一个值,然后取消订阅。
-
添加到 ssougnez 评论中,如果您的 observable 没有完成,那么您的承诺将无限期挂起,这是另一个警告。在 Promise 中封装 this 并没有任何好处,除非您作为开发人员觉得更舒服,或者某些外部 lib/api 需要它。
-
如果您谈论的是 http 请求,请参阅 Angular Http - toPromise or subscribe。还有Converting Observable to Promise
-
但是如果我使用第一个运算符,我仍然需要取消订阅。
-
当您想在完成之前取消可观察对象时,您只需取消订阅已完成的可观察对象。
toPromise不会为您取消订阅 observable。它订阅然后等待 observable 完成。使用first会导致 observable 完成。因此,关于退订,它与使用toPromise没有什么不同。