実現したいこと
「コールバック地獄」 と 「コールバック地獄をPromiseで置き換えた処理」2つのコードを同時に実行した際の実行タイミングについての質問です。
実現したいコード自体は調べたサイトに載ってあります。
今回は、「自分が試したコードの結果」が「調べサイトに掲載してあるコードの結果」と同じにならない仕組み的なことについてお聞きしたいです。
発生している問題・分からないこと
まず、「コールバック地獄のコード」 と 「Promiseのコード(調べたサイト)」 を同時に実行します。
すると、コンソールには
「 1秒 1 2秒 2 3秒 3 」
と、想定している結果が表示されます。(コールバック地獄 ⇒ .then の順に実行)
次に、「コールバック地獄のコード」と「Promiseのコード(私が試したコード)」を同時に実行すると、
「 1秒 1 2 2秒 3 3秒」
と、表示されます。(2秒から .then が先に実行)
.then は Promise が fulfilledの状態(処理が完了)したタイミングで実行されるという認識です。
上記の認識で自分のコードを見た際、1つ目の .then が開始された時点で fulfilled になり2つ目の .then が実行開始。
そのあと、2つ目のsetTimeout が実行開始されているように見えます。
なぜ、自分のコードでは 2つ目以降の .then が setTimeout よりも先に処理されているのでしょうか。
該当のソースコード
js
1//コールバック地獄のコード 2 3setTimeout(function () { 4 console.log('1秒'); 5 6 setTimeout(function () { 7 console.log('2秒'); 8 9 setTimeout(function () { 10 console.log('3秒'); 11 }, 1000); 12 13 }, 1000); 14}, 1000);
js
1// 調べたサイトのコード 2let delay = (ms) => { 3 return new Promise((resolve) => { 4 setTimeout(resolve , ms); 5 }); 6} 7 8delay(1000) 9 .then(() => { 10 console.log(1); 11 return delay(1000); 12 }) 13 .then(() => { 14 console.log(2); 15 return delay(1000); 16 }) 17 .then(() => { 18 console.log(3); 19 });
js
1// 私が試したコード 2 3let promise = new Promise((resolve) => { 4 resolve(); 5}) 6.then(() => { 7 setTimeout(() => { 8 console.log(1); 9 } , 1000); 10}) 11.then(() => { 12 setTimeout(() => { 13 console.log(2); 14 } , 2000); 15}) 16.then(() => { 17 setTimeout(() => { 18 console.log(3); 19 } , 3000); 20});
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
説明しづらかったので、上記にコードはまとめております。
補足
特になし
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/11/15 13:09 編集
2024/11/15 23:33 編集
2024/11/15 23:57
2024/11/16 02:14