JavaScript/TypeScriptの非同期処理を順番に実行する関数
非同期処理を実行する関数を配列で渡して、その関数を順番に実行する。reject された場合はfalse、すべて resolve だった場合は true を返す。resolve 時に返される値は void とする
const pipeAsync = async (funcs: ((...args: any[]) => Promise<void>)[]) => {
for(let i = 0; i < funcs.length; i++) {
try {
await funcs[i]()
}catch(e){
console.error('reject')
return false
}
}
return true
}
使い方。
// 非同期関数(resolveを返す)
const hoge = (message: string, delay: number) => () => {
return new Promise<void>((resolve) => {
setTimeout(() => {
console.log(`resolve ${message}`)
resolve()
}, delay)
})
}
// 非同期関数(rejectを返す)
const ngHoge = (message: string, delay: number) => () => {
return new Promise<void>((resolve, reject) => {
setTimeout(() => {
console.log(`reject ${message}`)
reject()
}, delay)
})
}
これは結果はtrueになる
(async () => {
const result = await pipeAsync([hoge('hogehoge', 3000), hoge('foofoo', 1000)])
console.log(result)
})()
これは結果はfalseになる。
(async () => {
const result = await pipeAsync([hoge('hogehoge', 3000), ngHoge('nghoge', 2000), hoge('foofoo', 1000)])
console.log(result)
})()
最近のコメント