我对RxJs还比较陌生,我想了解与Rx结合使用Promises的最佳方式是什么。
我想要创建的是Angular中的一个服务,它的作用类似于事件分派器模式,一旦promise完成,就会发出一个事件。我还需要的是,如果没有(事件)订阅者,则永远不会调用可观察对象。我最不希望发生的事情是,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;
});
任何未来的国家/地区/地区/地区/地区/地区/地区/地区/地区/地区/地区的订阅方不得触发$http请求。同样,如果该指令从未包含在页面中,则永远不会调用$http。
上面的解决方案是有效的,但是我不知道这种方法的潜在缺点和内存影响。这是一个有效的解决方案吗?使用RxJs是否有更好/更合适的方法来实现这一点?
非常感谢!
我在这里找到了答案(只是名称略有不同)rxjs在订阅时只使用一次promise
所以对于我的例子,答案很简单:
var loadCountries = function () { return $http.get('/countries'); };
var observable = Rx.Observable.defer(loadCountries).shareReplay();
使现代化
从rxjs6开始,您可以使用from()
您是否尝试使用rxjs5的fromPromise()
API?
检查这里的文档!
使用Rx。可见的。fromPromise(promise)
来自promise:
将Promises/符合规范的Promise和/或符合ES2015的Promise转换为工厂函数,该函数将该Promise返回到可观察序列。
例子:
var source = Rx.Observable.fromPromise(promise);
var subscription = source.subscribe(
function (x) {
console.log('Next: %s', x);
},
function (err) {
console.log('Error: %s', err);
},
function () {
console.log('Completed');
});
使现代化
rxjs6方法是来自
我想创建一个作为源变量:。 我想创建一个可观察的,每次值更改时都会生成提要。 我是说,当我这样做的时候: 在我的代码的某个地方,我希望收到订阅的提要,等等。。。 有什么想法吗?
假设我有一个,它从网络获取数据并发出数据,如果我订阅这个observable,每次它试图从网络请求数据时,它会很重。 我想创建BehaviorSubject并将其连接到observableA,这样任何其他线程/对象都将订阅BehaviorSubject以获取最新发出的数据。 到目前为止,我还不能用它来编码。我不能创建空的BehaviorSubject并在observableA内调用,因为它们彼此不
我对Observables和RxJs是新手,我想对回报进行调整。如果第一个选择器返回某个值,我希望第二个选择器可以观察到。但是如果第一个选择器没有返回那个特定的值,我想返回false,而不是(false)。我已经走了这么远,但这返回了一个可观察的结果
我正在学习RxJS,对于“听众”在哪里(在可观察的或观察者中),他们是如何订阅/取消订阅的,以及当观察者“不再对”可观察的“不感兴趣”时会发生什么,比如当你使用或。 对于第一部分——什么是订阅什么,什么是倾听者——我对这些陈述之间看似矛盾的地方感到困惑。从http://reactivex.io/rxjs/manual/overview.html我们读到观察者不是观察者的“听众” 这与addEven
我在创建一个将返回对象列表的可观察对象时遇到了麻烦。我有一个ID列表,想对我的数据库提出一个请求。在这种情况下,我使用的是Firebase。当得到一个结果时,我希望将这些对象中的每一个编译成一个列表,然后返回该列表。我需要在返回之前等待所有的对象都返回。我在我的视图模型反序列化器类中这样做。这是我的代码。 有几种方法可以从firebase数据库中返回数据,我可以返回Documentsnapshot
我试图理解当我使用 在或之后,在我使用时返回true 我知道是一次性的。isDisposed()返回false。有人能解释一下到底发生了什么吗?。我理解一个写得很好的观察。create不能在onComplete()或onError()之后发出项。