我有點困惑,哪些方法屬於什麼時候使用它們。當我想使用rxjs從firebaselistobservable中取出一個對象時,我還應該使用訂閱嗎?
現在,我基本上都使用訂閱,當我想要一個快速靜態值的Firebase時,它不適用於我。你能解釋什麼時候我應該使用訂閱與除了嚴格觀察之外的其他方法?
我有點困惑,哪些方法屬於什麼時候使用它們。當我想使用rxjs從firebaselistobservable中取出一個對象時,我還應該使用訂閱嗎?
現在,我基本上都使用訂閱,當我想要一個快速靜態值的Firebase時,它不適用於我。你能解釋什麼時候我應該使用訂閱與除了嚴格觀察之外的其他方法?
使用異步值時,您有幾個選項:promises
,rxjs
,callbacks
。每個選項都有其自身的缺點。
當您想要檢索單個異步值時,它很容易使用承諾簡化操作(.then(myVal => {})
)。但是這並不能讓你訪問諸如超時/限制/重試行爲之類的東西.Rx流,即使是單個值也能給你這些選項。
所以我的建議是,即使你想有一個單一的值,使用Observables。 「遠程數據庫以外的快速靜態值」沒有異步選項。
如果您不想使用.subscribe()
方法,還有其他選項可讓您激活您的訂閱,如.toPromise()
,這可能更容易使用Rx檢索單個值。
const getMyObjPromise = $firebase.get(myObjId)
.timeout(5000)
.retry(3)
.toPromise()
getMyObjPromise.then(obj => console.log('got my object'));
我的猜測是,你有一個包含了一堆的邏輯就像是一個」。然後」,你的結果保存到某些局部變量的預約方法。
首先:嘗試避免訂閱方法中的任何邏輯 - >在此之前使用流操作符,然後訂閱以檢索數據。 你更加靈活,單元測試流的單個部分要比測試整個組件本身要容易得多。
第二:儘量避免使用手動訂閱 - 在角度控制器中,如果不取消訂閱,它們很容易導致內存泄漏。 使用async-pipe代替模板,讓角度管理訂閱本身。
謝謝,這有助於我更多地理解 –
這幫了很多,謝謝! –