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)