29. async helper - `sequence()`を実装する

JavaScript

少し工夫が必要  - accepted / - tried

この問題は11. Compositionとは?pipe()を実装するとちょっと似ている。

async helper - sequence()を実装してください。pipe() みたいにasync関数を一つにする。

この問題にあるasync functionは全て以下のインタフェースを持つ。

type Callback = (error: Error, data: any) => void

type AsyncFunc = (
   callback: Callback,
   data: any
) => void

sequence()は、AsyncFunc 配列を受け取って、callbackを通じて一つにする。

例えばこういうasync function - 掛ける2

const asyncTimes2 = (callback, num) => {
   setTimeout(() => callback(null, num * 2), 100)
}

sequence()で 以下の掛ける4を作ることができる。

const asyncTimes4 = sequence(
  [
    asyncTimes2,
    asyncTimes2
  ]
)

asyncTimes4((error, data) => {
   console.log(data) // 4
}, 1)

エラーが発生する時、残りの未実行の関数を飛ばし、最後のcallbackを実行するべきです。

フォローアップ

Promiseを使っても、Promise使わなくても解けますか?

時間と空間複雑性はどう?