在 Angular 應用程式中,您可能最終會擁有很多 Observable,并且您可能會在不再需要時忘記完成它們。因此,它們可能會意外觸發,導致難以除錯的意外副作用。
有沒有辦法在除錯程序中隨時查看所有未完成的 Observable?我正在考慮一個 DevTools 工具。
uj5u.com熱心網友回復:
是的,有一個記憶體分析器 devtool。記憶體 -> 拍攝快照。做一些導致記憶體泄漏的事情,拍攝另一個快照并比較它們
uj5u.com熱心網友回復:
我認為沒有任何明顯而簡單的方法可以完全滿足您的要求。
但是,由于RxJS 7.3 tap()運算子可以處理三種通知型別之外的三個新事件“訂閱”、“取消訂閱”和“完成”(與使用finalize()運算子基本相同)。(使用defer()和finalize()在 RxJS 版本 < 7.3 中可以實作相同的功能)。
在您的情況下,您可以收聽所有“訂閱”和“取消訂閱”,如果它們被呼叫的次數相同,那么您就知道所有訂閱都已手動取消訂閱或源已完成/錯誤:
import { of, tap, delay } from 'rxjs';
let counter = 0;
const source$ = of('World')
.pipe(
delay(1000),
tap({
subscribe: () => console.log('Subscribers: ', counter),
finalize: () => console.log('Subscribers: ', --counter),
}),
);
source$.subscribe();
source$.subscribe();
setTimeout(() => source$.subscribe(), 500);
setTimeout(() => source$.subscribe(), 2000);
現場演示:https : //stackblitz.com/edit/rxjs-oht1ex?devtoolsheight=60
如果所有訂閱者都取消訂閱,那么您必須"Subscribers: 0"在最后的控制臺中看到。
請注意,這tap()需要是最后一個運算子,以便在finalize發出延遲值后呼叫處理程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/348021.html
標籤:有角的 rxjs 可观察的 rxjs-observables
