关于RxJS lastValueFrom使用注意事项的疑问:complete或error是否均算结束?
RxJS
lastValueFrom 文档警告疑问解答 RxJS lastValueFrom 文档提示:
WARNING: Only use this with observables you know will complete. If the source observable does not complete, you will end up with a promise that is hung up, and potentially all of the state of an async function hanging out in memory.
我们团队对此存在困惑:该警告中的"会完成"是指"会发出complete信号",还是"会通过发出complete或error任一信号结束"?由于HttpClient有时会发出error而非complete,我们无法从文档中确定这种情况是否会导致Promise挂起并驻留在内存中。
解答
- 这里的"会完成"实际指的是Observable会通过complete或error任一信号终止,并非仅局限于发出complete信号。
- 对于HttpClient的请求Observable而言,无论请求成功(发出
next后触发complete)还是失败(直接触发error),它都会自动终止。因此用lastValueFrom包裹HttpClient的Observable是安全的,不会出现Promise挂起、内存泄漏的问题。 - 只有当Observable永远不触发complete或error信号时(比如一个持续发送事件但永不终止的定时器Observable),
lastValueFrom返回的Promise才会一直处于pending状态,进而导致相关异步函数的状态驻留在内存中无法释放。
内容的提问来源于stack exchange,提问作者OhNoDaddyO
相关产品推荐
相关产品推荐

