Promise.race
を使いタイムアウト処理をしようとしているのですが Promise の理解が浅いせいかロックされてしまいます。
search() は終わらない処理として、"timeout 3000" が返ってきて処理を終えるようにしたいです。
js
1const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); 2 3const search = async () => { 4 while (true) { } // 重い処理 5 return 'while' 6 7} 8const timeout = async (ms) => { 9 await sleep(ms) 10 return `timeout ${ms}` 11} 12 13async function main() { 14 console.log(await Promise.race([timeout(1000), timeout(2000)])) // 動く 15 // "timeout 1000" 16 console.log(await Promise.race([timeout(3000), search()])) // 止まる 17} 18main()
async/await構文 でなく new Promise で書いても結果は同じで止まってしまいました。
const searchPromise = () => new Promise((resolve) => { while (true) { } resolve('while') }) console.log(await Promise.race([timeout(3000), searchPromise()]))

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/28 00:23
2021/07/28 00:31