Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.0/Rx.js"></script>
 
// 1秒毎に`"A"`、`"B"`、`"C"`、`"D"`、`"E"`を通知する Observable
const observable = Rx.Observable.interval(1000)
  .take(5)
  .map(index => 'ABCDE'[index]);
// 1.4秒毎に`"F"`、`"G"`、`"H"`、`"I"`、`"J"`を通知する Observable
const observable2 = Rx.Observable.interval(1400)
  .take(5)
  .map(index => 'FGHIJ'[index]);
// 2.2秒毎に`"K"`、`"L"`、`"M"`、`"N"`、`"O"`を通知する Observable
const observable3 = Rx.Observable.interval(2200)
  .take(5)
  .map(index => 'KLMNO'[index]);
// 指定した Observable(`observable`、`observable2`、`observable3`)が全て`next`通知をしたら、
// それぞれの Observable が最後に`next`通知した値を配列にまとめて`next`通知する Observable を生成する。
const combined = Rx.Observable.combineLatest(observable, observable2, observable3);
combined.subscribe(
  x => console.log(x),
  error => console.error(`error: ${error}`),
  () => console.log('complete')
);
// 生成した Observable が最初に`next`通知をするタイミングは`observable3`が1回目(2.2秒後)の`next`通知をした時。
// それまでに以下の`next`通知がされている。
// 1. `observable`が`"A"`を`next`通知する。
// 2. `observable2`が`"F"`を`next`通知する。
// 3. `observable`が`"B"`を`next`通知する。
// 4. `observable3`が`"K"`を`next`通知する。
//    このタイミングで指定した Observable が全て`next`通知をしたので、
//    それぞれの Observable が最後に通知した値がまとめられた配列が`next`通知され、以下がコンソール出力される。
// => ["B", "F", "K"]
//
// これ以降は、いずれかの Observable(`observable`、`observable2`、`observable3`)が`next`通知する度に、
// それぞれの Observable が最後に通知した値を配列にまとめて`next`通知をするので、以下がコンソール出力される。
// => ["B", "G", "K"]
// => ["C", "G", "K"]
// => ["D", "G", "K"]
// => ["D", "H", "K"]
// => ["D", "H", "L"]
// => ["E", "H", "L"]
// => ["E", "I", "L"]
// => ["E", "I", "M"]
// => ["E", "J", "M"]
// => ["E", "J", "N"]
// => ["E", "J", "O"]
// =>  "complete"
Output

This bin was created anonymously and its free preview time has expired (learn why). — Get a free unrestricted account

Dismiss x
public
Bin info
anonymouspro
0viewers