孤独プログラマー譚

孤独死が近い。

RxJS Promise.all()はforkJoinで書き換え

Promise.all()。
すべてのPromiseが発火されるのを待つ。

let foo1 = getPromise(123)
let foo2 = getPromise('abc')
Promise.all([foo1, foo2])
.then(cl) // [123, 'abc']


forkJoinで書き換えられる。

let bar1 = rx.interval(100).pipe(op.take(1))
let bar2 = rx.interval(1000).pipe(op.take(1))
rx.forkJoin(bar1, bar2)
.subscribe(cl) // 1秒後に[0, 0]


pipeの中で使いたい場合は、mergeMapを使う。

rx.interval(1000).pipe(op.take(1))
.pipe(
  op.mergeMap(v => {
    let foo1 = rx.interval(100).pipe(op.take(1))
    let foo2 = rx.interval(1000).pipe(op.take(1))
    return rx.forkJoin(foo1, foo2)
  })
)
.subscribe(cl) // 2秒後に[0, 0]


共通メソッド。

function getPromise(v = 0) {
  return new Promise((resolve) => {
    setTimeout(() => resolve(v), 1000);
  });
}

function cl(v) {
  console.log(v)
}