Rxjs Promise 像 Observable
Rxjs Promise like Observable
我想找一张收据以提供Promise
赞Observable
我的意思是:
Observable
提供单个值并完成,
并且任何订阅者(完成之前和之后)都应该获得该单一值。
我想出了 Rx.Observable.create
publishLast
和 connect
的组合。
var getPromiseLike=function(){
console.log('getPromiseLike()');
//// var an_object={}; <--- this should happen inside Obs function
var prom_like = Rx.Observable.create(function(obs) {
var an_object={}; /// <--- here !
setTimeout(function(){
obs.onNext(an_object);
obs.onCompleted();
},500);
}).publishLast();
prom_like.connect();
return prom_like;
};
var promiselike=getPromiseLike();
var obj1;
promiselike
.subscribe(function(obj){
console.log('onNext1');
obj1 = obj;
},
function(err){},
function(){
console.log('onComplete1');
});
setTimeout(function(){
promiselike
.subscribe(function(obj){
console.log('onNext2 obj1===obj :'+(obj1===obj)); //true
},
function(err){},
function(){
console.log('onComplete2');
});
},1000);
/*LOGS:
getPromiseLike()
script.js:19 onNext1
script.js:24 onComplete1
script.js:31 onNext2 obj1===obj :true
script.js:35 onComplete2
*/
这是最简单的解决方案还是我遗漏了一些内置函数?
plnkr
在 RxJS 中,通常使用 AsyncSubject
.
来建模类似构造的承诺
它具有许多 promise 具有的有用的属性:
- 它只接收一个值,就像一个承诺,并且只会用那个值调用下一个。
- 它为所有未来的计算缓存该值。
- 它是一个 Subject,所以它就像某些 promise 库中的 deferred。
注意:我个人认为将 promises 与 observables 混合没有问题,我在自己的代码中这样做并且 Rx 很好地处理了 promises。
我想找一张收据以提供Promise
赞Observable
我的意思是:
Observable
提供单个值并完成,
并且任何订阅者(完成之前和之后)都应该获得该单一值。
我想出了 Rx.Observable.create
publishLast
和 connect
的组合。
var getPromiseLike=function(){
console.log('getPromiseLike()');
//// var an_object={}; <--- this should happen inside Obs function
var prom_like = Rx.Observable.create(function(obs) {
var an_object={}; /// <--- here !
setTimeout(function(){
obs.onNext(an_object);
obs.onCompleted();
},500);
}).publishLast();
prom_like.connect();
return prom_like;
};
var promiselike=getPromiseLike();
var obj1;
promiselike
.subscribe(function(obj){
console.log('onNext1');
obj1 = obj;
},
function(err){},
function(){
console.log('onComplete1');
});
setTimeout(function(){
promiselike
.subscribe(function(obj){
console.log('onNext2 obj1===obj :'+(obj1===obj)); //true
},
function(err){},
function(){
console.log('onComplete2');
});
},1000);
/*LOGS:
getPromiseLike()
script.js:19 onNext1
script.js:24 onComplete1
script.js:31 onNext2 obj1===obj :true
script.js:35 onComplete2
*/
这是最简单的解决方案还是我遗漏了一些内置函数? plnkr
在 RxJS 中,通常使用 AsyncSubject
.
它具有许多 promise 具有的有用的属性:
- 它只接收一个值,就像一个承诺,并且只会用那个值调用下一个。
- 它为所有未来的计算缓存该值。
- 它是一个 Subject,所以它就像某些 promise 库中的 deferred。
注意:我个人认为将 promises 与 observables 混合没有问题,我在自己的代码中这样做并且 Rx 很好地处理了 promises。