gpt4 book ai didi

javascript - RxJs 从结果 Promise 创建 Observable

转载 作者:可可西里 更新时间:2023-11-01 02:05:42 33 4
gpt4 key购买 nike

我是 RxJs 的新手,我想了解将 Rx 与 Promises 结合使用的最佳方式是什么。

我想要创建的是 Angular 中的一个服务,它充当事件调度程序模式,并在 promise 完成后发出一个事件。我还需要的是,如果没有(事件)订阅者,则永远不会调用可观察对象。我最不想发生的事情是,可观察对象的任何后续订阅者都会获得相同的结果,而不会触发对服务器的另一个请求。我在这里设法实现了自己的解决方案:

// ... 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();

现在任何时候我订阅一个新的“监听器”来接受可观察对象。任何新订阅者都将获得缓存的值,而无需再次接触服务器。

所以在我的“消费者”( Angular Directive(指令))中,我想做这样的事情:

// ... countryInput directive code:

COUNTRIES_LOADED.subscribe(function (response) {
// Fill in countries into scope or ctrl
scope.countries = response.countries;
});

COUNTRIES_LOADED 观察者的任何 future 订阅者不得触发 $http 请求。同样,如果该指令从未包含在页面中,则永远不会调用 $http。

上面的解决方案有效,但是我不知道这种方法的潜在缺点和内存影响。这是一个有效的解决方案吗?使用 RxJs 是否有更好/更合适的方法来实现这一目标?

非常感谢!

最佳答案

使用 Rx.Observable.fromPromise(promise)

来自 promise :

Converts a Promises/A+ spec compliant Promise and/or ES2015 compliant Promise or a factory function which returns said Promise to an Observable sequence.

示例:

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 方法是 from

关于javascript - RxJs 从结果 Promise 创建 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38784643/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com