对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