31. async helper - `race()`を実装する

簡単  - accepted / - tried

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

async function helper - race() を実装してください。

race()Promise.race()にちょっと似ている。

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

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

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

race()AsyncFunc 配列を受け取り、新しい関数を返す。この関数は一つでもfunction実行終わる時、またはエラー発生時に実行される。

例えば以下の三つのasync function

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

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

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

race() では以下のように動く

const first = race(
  [
    async1,
    async2,
    async3
  ]
)

first((error, data) => {
   console.log(data) 
   // 2、最初に実行されるfunctionの結果が2なので
}, 1)

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

(98)