- ベストアンサー
javascriptでwait()を使用したい方法
- javascriptでwait()を使用したい場合、無限ループを使わずに次の処理を待つ方法があります。
- 具体的には、setTimeout()関数を使用することで一定時間待機することができます。
- また、この方法では非同期処理を実現することもできます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず、wait()はwhileを使ったビジーループなどで実現することもできますが、けしてしてはいけません。 何故かと言うと、例えばブラウザ上のJSが処理を止めるということは、 イベントループが回らなくなり、ブラウザも固まるということだからです。 ですのでまず、コールバックを覚えましょう。 たとえばsetTimeoutを使うと、指定した時間後に関数を呼ぶことができます。 これを使って以下のように書けます。 function test(id) { writeX("1", "a1") ; setTimeout( function(){ writeX("3", "a3") ; writeX("4", "a4") ; writeX("5", "a5") ; writeX("6", "a6") ; }, 3000) ; } これがJSに置ける基本的な非同期処理のやり方です。 1年くらいやってJSに慣れたら、Promiseやジェネレータ、asyc-awaitも覚えてください。 そうすれば最初の理想に近いこういう風にかけるようにもなります。 async function test(id) { writeX("1", "a1") ; await timeout(3000) ; writeX("3", "a3") ; writeX("4", "a4") ; writeX("5", "a5") ; writeX("6", "a6") ; }
その他の回答 (1)
- t_ohta
- ベストアンサー率38% (5292/13827)
JavaScriptは非同期でどんどん処理が進むので、setTimeout() で処理を遅らせるのであれば、その処理以降のプログラムは全部 setTimeout() の中に書いてやる必要があります。 function test(id) { writeX("1", "a1"); wait(3000, function(){ writeX("waited", "a2"); writeX("3", "a3"); writeX("4", "a4"); writeX("5", "a5"); writeX("6", "a6"); }); } function writeX(x, id) { document.getElementById(id).value = x ; } function wait(t, fnc) { setTimeout( function() { fnc(); }, t ) ; }
お礼
貴重な情報をお教えいただきありがとうございました。 次世代のコマンドの知識をお持ちということで、 どのような形で開発中の専門的内容をお知りになられたか 参考までにご指導いただければ幸いです。