2016-11-10 52 views
1

我正在模擬一個包含在observable中的http調用。我最初的想法是簡單地使用Observable.of類似Promise.resolve,但它似乎沒有工作,我預計: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>

似乎Observable.of運行同步,同時Rx.Observable.from(Promise.resolve('from1'))異步運行(這是什麼我想要)。只要我想測試顯示的微調,同步呼叫不是我的選擇。我有一些解決方案,例如,延遲它或設置一個計時器:

Rx.Observable.of('of1').delay(0).subscribe... 

但這對我來說也不好看。

如何將Observable.of變爲異步運行?從Promise轉換它看起來像是一種矯枉過正。

回答

2

如果你想觀察行爲不同的行爲,你可以傳遞給它一個調度器。調用堆棧清空後,您可以使用異步調度程序使observable發出值。 代碼明智的,這將是這樣的:

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

console.log('first'); 

這將註銷:

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

在這裏工作jsbin例如:http://jsbin.com/cunatiweqe/6/edit?js,console