30. async helper - `parallel()`を実装する

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

この問題は 29. async helper - sequence()を実装するの続きです。

async helper - parallel()を実装してください!

parallel()Promise.all()にちょっと似ている。問題29番にあるsequence()と違って、async関数の実行に順番はない、最初に一気に全部呼ばれる。

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

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

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

parallel()AsyncFunc配列を受けて、新しいfunctionを返す。このfunctionは、全てのasync function実行終わる時に、またはエラー発生時に呼ばれる。

例えば3つのasync関数があるとする

const async1 = (callback) => {
   callback(undefined, 1)
}

const async2 = (callback) => {
   callback(undefined, 2)
}

const async3 = (callback) => {
   callback(undefined, 3)
}

parallel()を使うと

const all = parallel(
  [
    async1,
    async2,
    async3
  ]
)

all((error, data) => {
   console.log(data) // [1, 2, 3]
}, 1)

エラー発生時、最初のエラーだけ最後に渡される、残りのエラーとデータは全部スルーされる。

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

(82)