2016-11-10 16 views
1

私は、http呼び出しを観測可能なものにラップしようとしています。私の最初のアイデアは、単にPromise.resolveに似Observable.ofを使用していたが、私は期待どおりに動作していないよう:Observable.of turn async

Rx.Observable.of('of1').subscribe(e => console.log(e)); 
 

 
console.log('of2'); 
 

 
Rx.Observable.from(Promise.resolve('from1')).subscribe(e => console.log(e)); 
 

 
console.log('from2');
<script src="https://npmcdn.com/@reactivex/[email protected]/dist/global/Rx.umd.js"></script>

Rx.Observable.from(Promise.resolve('from1'))実行が非同期(つまりは何である一方、それはそのObservable.of実行同期と思われますが欲しいです)。私がスピナーをテストしたいのであれば、同期呼び出しは私の選択肢ではありません。

たとえば、次のような解決策があります。それを遅らせるか、タイマーを設定してください:

しかし、これも私によく見えません。

Observable.ofを非同期で実行するにはどうすればよいですか?それをPromiseからConvertingに変えるのは残酷なようです。

答えて

2

オブザーバブルの動作が異なるようにするには、スケジューラに渡すことができます。非同期スケジューラを使用すると、呼び出しスタックがクリアされるとすぐに、観測可能な値を出力することができます。 コードが賢明これは次のようになります。

Rx.Observable.of(1, 2, 3, Rx.Scheduler.async).subscribe(
    (val) => console.log(val) 
); 

console.log('first'); 

これはログアウトします:ここにjsbin例の作業

//first 
//1 
//2 
//3 

http://jsbin.com/cunatiweqe/6/edit?js,console