2016-12-14 22 views

回答

2

使用異步值時,您有幾個選項: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')); 
+0

這幫了很多,謝謝! –

1

我的猜測是,你有一個包含了一堆的邏輯就像是一個」。然後」,你的結果保存到某些局部變量的預約方法。

首先:嘗試避免訂閱方法中的任何邏輯 - >在此之前使用流操作符,然後訂閱以檢索數據。 你更加靈活,單元測試流的單個部分要比測試整個組件本身要容易得多。

第二:儘量避免使用手動訂閱 - 在角度控制器中,如果不取消訂閱,它們很容易導致內存泄漏。 使用async-pipe代替模板,讓角度管理訂閱本身。

+0

謝謝,這有助於我更多地理解 –

相關問題