孤独プログラマー譚

孤独死が近い。

RxJS awaitをRxJSを書き直す

awaitの連続。

(async () => {
  let foo = await getPromise()
  foo = await getPromise(foo)
  foo = await getPromise(foo)
  cl(foo) // 3
})()

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


thenのメソッドチェーンで書き換え。

let bar = getPromise()
.then(getPromise)
.then(getPromise)
.then(cl)


subscribeメソッドの入れ子。見た目が良くない。

obs()
.subscribe((v) => {
  obs(v).subscribe((v) => {
    obs(v).subscribe(cl)
  })
})

function obs(v = 0) {
  return rx.Observable.create((observer) => {
    setTimeout(() => {
      observer.next(v + 1)
      observer.complete()
    }, 1000)
  })
}


これが本命。mergeMapを使う。

obs()
.pipe(
  op.mergeMap(obs),
  op.mergeMap(obs),
)
.subscribe(cl)