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

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

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

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

Q&A

解決済

2回答

456閲覧

「setTimeout」と「forを使ったループ処理」を組み合わせたプログラムを書きたいのですが、うまく動きません。

sino3325

総合スコア65

JavaScript

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

0グッド

2クリップ

投稿2022/04/30 09:31

JavaScriptの初学者です。
私自身の説明につたないところもあると思いますが、アドバイス頂ければと思います。

以下のコードを書いたのですが、思い通りの結果にならず困っております。

実現したい処理というのが【『1000ms後に「こんにちは」と表示される』という処理を3回繰り返す】というものです。(つまりは、時間差でこんにちはを表示してほしい...)

現状の問題は、以下のプログラムを実行すると1000ms秒後に「こんにちは」がいっぺんに3回表示されてしまうことです。

JavaScript

1{ 2 for (let i = 1; i <= 3; i++) { 3 const x = function() { 4 console.log('こんにちは'); 5 }; 6 setTimeout(x, 1000); 7 } 8}

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

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

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

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

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

guest

回答2

0

ベストアンサー

全部1秒後に実行されるようになっているので、

javascript

1i * 1000

とすれば期待通りになると思います。

投稿2022/04/30 12:53

fake_shibe

総合スコア806

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

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

sino3325

2022/04/30 14:00

ありがとうございます! そこを修正すればよかったんですね。 とても助かりました。
cx20

2022/04/30 14:09

あぁ、ようやく意味が分かりました。 --------------------------- setTimeout(x, i * 1000); --------------------------- とすることで1秒後、2秒後、3秒後の3つのタイマーが登録されるということですね。確かにその方が簡単そうです。
guest

0

こんな感じで如何でしょうか?

https://jsfiddle.net/cx20/g9rdaozc/

javascript

1const sleep = () => new Promise(resolve => { 2 setTimeout(() => { 3 resolve(); 4 }, 1000) 5}) 6 7async function main() { 8 for (let i = 1; i <= 3; i++) { 9 console.log('こんにちは ' + i + ' 回目'); 10 await sleep(); 11 } 12} 13 14main();

<参考>
■ awaitできるsetTimeoutを1行で書く方法
https://qiita.com/suin/items/99aa8641d06b5f819656

投稿2022/04/30 09:47

編集2022/04/30 10:03
cx20

総合スコア4633

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

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

cx20

2022/04/30 13:08

その他の方法についてはこちらが参考になるかもしれません。 ■ 【JavaScript入門】処理を一時停止するsleep機能の実現方法まとめ https://www.sejuku.net/blog/24629
sino3325

2022/04/30 14:07

ご回答ありがとうございます。 ちょっと私にはまだうまく飲み込めない知識のため、私自身もっと知識をつけてから改めて読んでみます。 貴重な参考文献を教えて下さりありがとうございます。
cx20

2022/04/30 14:25

今回のケースではfake_shibeさんの回答されている方法が簡単そうです。 動作上の違いとしては、 fake_shibeさんの方法では1度に3つ分のタイマーが登録され、1秒後、2秒後、3秒後に表示がおこなわれます。 私の提示したやり方は、1回表示する毎に1秒を待つ処理を入れている といった違いになります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問