LoginSignup
0
0

More than 1 year has passed since last update.

Node.js非同期処理について超簡略サンプル

Posted at

以下の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と同じような戻り値になる。
なんか関数内の動きがめっちゃ変だけど…。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0