以下のNodeを実行すると、順番がぐちゃぐちゃになる。
junban.js
function output ( txt){
console.log("関数処理始まり"); //出力
setTimeout(function(){ console.log('hoge') }, 1000)
console.log(txt); //出力
console.log("関数処理終わり"); //出力
};
async function main(){
console.log('読み込み前');
await output('処理')
console.log('読み込み後');
}
main()
$ node junban.js
読み込み前
関数処理始まり
処理
関数処理終わり
読み込み後
hoge
この状態ではawaitは効かない。
return new Promise
を使うと、結果は返ってくる。
function output (txt){
return new Promise((resolve, reject) =>{
console.log("関数処理始まり"); //出力
setTimeout(function(){ console.log('1秒待つ') }, 1000)
setTimeout(function(){ resolve('更に待つ') }, 1000)
console.log(txt); //出力
console.log("関数処理終わり"); //出力
})
};
async function main(){
console.log('読み込み前');
result = await output('処理')
console.log('result :', result);
console.log('読み込み後');
}
main()
resolveがreturnと同じような戻り値になる。
なんか関数内の動きがめっちゃ変だけど…。