setTimeoutの結果がほしい
setTimeoutの処理の結果が欲しい時
setTimeoutの内側でreturnすればいいと思ったけどそれじゃできない
function wait1sec(num) { setTimeout(() => { console.log('計算終了'); // #1 return num * 2; }, 10); console.log('setTimeoutの次'); // #2 } function main() { let x = wait1sec(100); console.log(`計算結果 = ${x}`); // #3 } main(); //出力結果 // setTimeoutの次 #2 // 計算結果 = undefined #3 // 計算終了 #1
setTimeout自体の戻り値はtimerIdだし、console.log(#3)を遅くしてもだめ。
setTimeoutにコールバック関数を渡しちゃえばできるけど、読みづらい(これがコールバック地獄らしい)。
そんなときはpromiseを使う
function wait1sec(num) { return new Promise(resolve => { setTimeout(() => { console.log('計算終了'); // #1 resolve(num * 2); }, 10); }) console.log('setTimeoutの次'); // #2 } async function main() { let x = await wait1sec(100); console.log(`計算結果 = ${x}`); // #3 } main(); //出力結果 // 計算終了 #1 // 計算結果 = 200 #2