ようわからんかったのでメモ
TL;DR
- Array.fromAsync()は順次実行
- Promise.all()は同時実行
const sleep = delay => new Promise(resolve => setTimeout(resolve, delay))
console.time()
await Array.fromAsync([200, 100, 300], sleep)
console.timeEnd()
// elapsed: 600ms
console.time()
await Promise.all([200, 100, 300].map(sleep))
console.timeEnd()
// elapsed: 300ms
cc @juner
戻り値
どちらも解決した値が入ってくる。HTTPリクエストを投げたいときにDoS攻撃したくないなら、Array.fromAsync()はあり!
const sleep = delay => new Promise(resolve => setTimeout(() => resolve(delay), delay))
console.time()
console.log(await Array.fromAsync([200, 100, 300], sleep))
console.timeEnd()
// elapsed: 600ms
console.time()
console.log(await Promise.all([200, 100, 300].map(sleep)))
console.timeEnd()
// elapsed: 300ms
こんな感じでDoS攻撃を防げます
const responses = await Array.fromAsync(Array(30), () => fetch('https://httpbin.org/uuid'))
console.log(responses)