質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

225閲覧

JavaScriptの処理順

Ussserrrr

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2025/06/11 19:11

編集2025/06/11 19:14

実現したいこと

setTimeoutとループ処理を使うことで、
処理順を制御できずに困っています。

▼理想
親ループ-1

子ループ-1-1
子ループ-1-2

親ループ-2

子ループ-2-1
子ループ-2-2

▼現状
子ループの途中で、親ループの処理が始まってしまう

該当のソースコード

JavaScript

1let step = 0; 2while(step <= 2) { 3 let i = 0; 4 console.log('親ループ:'+step); 5 while(i <= 2) { 6 setTimeout(function () { 7 console.log('子ループ:'+step+'+'+i); 8 i++ 9 }, 1000); 10 } 11 step++ 12 }

同期非同期について勉強してみましたが、
setTimeoutがはいるとよくわからなくなってしまい困っています。
ご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

▼現状
子ループの途中で、親ループの処理が始まってしまう

ループそのものは同期的に書かれているので、きちんと途中で回ってはいます。ただ、setTimeoutなど非同期の処理は同期的処理が全部片付いてから実行されるので、console.logの出力は最後になります。

forwhileの途中に非同期処理を混ぜて、それも順番通りに実行されるようにしたい…のであれば、async-awaitを使うのが便利です。

投稿2025/06/11 22:42

maisumakun

総合スコア146628

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

多分こういうことですよね?

html

1<script type="module"> 2for(let i=0; i<2;i++){ 3 console.log(`親ループ:${i}`); 4 for(let j=0; j<2;j++){ 5 const message=await new Promise(resolve=>setTimeout(()=>{ 6 resolve(`子ループ:${i}+${j}`); 7 },1000)); 8 console.log(message); 9 } 10} 11</script>

あとは姑息ですがすべて非同期で処理するとか

html

1<script> 2const max_i=2; 3const max_j=2; 4for(let i=0; i<max_i;i++){ 5 setTimeout(()=>console.log(`親ループ:${i}`),i*max_j*1000); 6 for(let j=0; j<max_j;j++){ 7 setTimeout(()=>console.log(`子ループ:${i}+${j}`),(i*max_j+j+1)*1000); 8 } 9} 10</script>

投稿2025/06/12 00:22

編集2025/06/12 03:39
yambejp

総合スコア117780

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ussserrrr

2025/06/12 15:43

Promise使う方の使い方がまだ理解しきれていないので、 参考にさせていただきつつ勉強していきます。 最悪姑息バージョンで動かしてみます! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問