2017-03-17 13 views
3

私は一定の間隔でObservableから放出したい項目の配列を持っています。私はrxjsライブラリを使用しています間隔でObservable.fromの値を出力します

は角2

これは私の現在のソリューションであるに含まれますが、私は見つけていないです反応方法があるような気がします。この解決策は、アレイが使い尽くされた後も値を生成し続けますが、実際には完了するはずです。 ?Observable.intervalObservable.fromを駆動するためにそこにいくつかの方法がある:

var array = [1,2,3]; 

var source = Rx.Observable 
    .interval(500 /* ms */) 
    .map(function() { 
     return array.pop(); 
    }); 

var subscription = source.subscribe(
    function (x) { 
     console.log('Next:', x); 
    }, 
    function (err) { 
     console.log('Error: ' + err); 
    }, 
    function() { 
     console.log('Completed'); 
    }); 

は出力:

"Next:" 
3 
"Next:" 
2 
"Next:" 
1 
"Next:" 
undefined 

答えて

2

そのような単純なもののために、何をやったことは、私はむしろ、指定されたインデックスを使用したいということを除いて結構ですintervalから元の配列を変更するpopを使用する代わりに、指定されたインデックスで配列を読み取ることができます(反応型プログラミングと混在していますか?=))

私はあなたに別の小道具あなたは多分、他の演算子を発見することがありようosal:もちろん

const { Observable } = Rx 
 

 
const myArray = [1, 2, 3] 
 

 
const interval$ = Observable.interval(500) 
 

 
Observable 
 
    .from(myArray) 
 
    .zip(interval$) 
 
    .do(([x]) => console.log(x)) 
 
    .subscribe(
 
    () => {}, 
 
    () => {}, 
 
    () => console.log('Stream ended !') 
 
)
<script src="https://unpkg.com/[email protected]/bundles/Rx.min.js"></script>

+0

はアルファベット順に、その最後のオペレータが...これは本当に素晴らしいです、ありがとう!私はリアクティブプログラミングを楽しんでいます –

+0

はいRxJsは本当に素晴らしいですし、それもあなたがそれを学ぶことを開始すると簡単ではない、それは非常に楽しいです!どちらの演算子を使うべきかわからない場合は、[marble diagrams](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html)を調べてみてください。そこには多くがありますが、あなたは正しいものを見つけるかもしれないし、http://reactivex.io/rxjs/に行きます。あなたが必要とするものを選んでください、それは正しい演算子を見つけるためにあなたを導くでしょう:) – Maxime

+0

http://stackoverflow.com/questions/26448724/running-async-tasks-in-parallelを見てください – Whisher

関連する問題