對RxJs來說我相當新,我想了解什麼是最好的方法是將Rx與Promises結合使用。RxJs從生成的Promise創建Observable
我想創建的是Angular中的服務,它的作用與事件調度程序模式非常相似,並在完成承諾後發出事件。我還需要的是,如果沒有(事件)訂戶,那麼observable永遠不會被調用。我想要發生的最後一件事是任何後續的observable訂閱者都會得到相同的結果,而不會觸發另一個請求到服務器。 我已成功地實現在這裏我自己的解決方案:
// ... CountryService code
var COUNTRIES_LOADED = Rx.Observable
.create(function (observer) {
$http
.get('/countries')
.then(function (res) {
observer.onNext(res);
}, function (err) {
observer.onError(err);
})
.finally(function() {
observer.onCompleted();
});
})
.shareReplay();
現在,只要我訂閱了新的「聽衆」,以主題的觀察到的將被拉動。任何新的訂戶都將獲得緩存的值,而不會再次觸摸服務器。
所以在我的「消費者」(角指令)我願做這樣的事情:
// ... countryInput directive code:
COUNTRIES_LOADED.subscribe(function (response) {
// Fill in countries into scope or ctrl
scope.countries = response.countries;
});
到COUNTRIES_LOADED觀察者的任何未來的用戶也不得觸發$ HTTP請求。同樣,如果該指令從未包含在頁面中,$ http將永遠不會被調用。
上述解決方案的工作,但我不知道這種方法的潛在缺陷和內存影響。這是一個有效的解決方案?使用RxJs有更好/更合適的方法來實現這一點嗎?
非常感謝!
檢查此鏈接使用rxjs與angularjs http://cvuorinen.net/2016/05/using-rxjs-observables-with-angularjs-1/ –
您的解決方案看起來不錯,我不認爲你能想出比這更好的東西。 – estus