する質問をすることでしか得られない、回答やアドバイスがある。55前提・実現したいこと複数の関数を時間差で実行してそれを繰り返す方法を知りたく思っています。※本当はもっと色々な処理をさせたいのですが質問しやすいようにシンプルにしました。検索しているとこのような処理に「Promise」を使用することをすすめている記事が多く、ひとまず自分なりに記述をしてみました。これを繰り返し実行する方法がわからずにいます。.then(drinkCoffee)どうぞ宜しくお願いしますattachmentクリップ3気になる質問をクリップするクリップした質問は、後からいつでもマイページで確認できます。クリップした質問に回答があった際、通知やメールを受け取ることができます。自分も答えを知りたい質問者以外のユーザにも役立つ評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。質問の評価を上げたことを取り消します低評価-評価を下げられる数の上限に達しました評価を下げることができません1日5回まで評価を下げられます1日に1ユーザに対して2回まで評価を下げられます質問の評価を下げるteratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。コメントをしてください。送信する質問の評価を下げる機能の利用条件この機能を利用するためには、以下の事項を行う必要があります。「時間差で実行、さらに繰り返し」処理を行うには?とりあえず、Promiseを使う前提で書いて見たコードが以下となります。B(追記)質問者さんの前回の質問を見る限りでは、単に時間差で複数の同期処理を実行させたいように見受けられるので、maisumakunさんの回答にあるようにsleep関数のようなものを作って、各同期処理の前で実行してあげるのが良さそうです。いうことで、maisumakunさんの回答を参考に以下、generator版のコードを追加。追記のコードも最初のコードのように、ループ内で実行させたい関数が可変の場合でも対応できるようにしたかったですが、時間切れの為、非対応としました。質問者さんの前回の質問の場合は、「一定間隔」で複数の(異なる)処理を実行させたいというものだったので、Promiseを使わずに単に、setTimeout()関数で定期実行させてあげるだけで良いかと思います。以下、前回の質問の「異なる複数の処理」に対応したコードです。Promise()に渡すコールバック関数内で、非同期処理が失敗した時にreject()が実行されるようにコードを書いてあげる必要があります。parametersを使っていますが、詳細やブラウザ対応状況は以下でご確認ください。(英語記事へのリンクになっていますが、リンク先ページで言語切り替えが可能です。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。14:58とても丁寧なご回答感謝いたします。ジェネレーターのことは初めて知りました。(function*)←一瞬間違いかと思ってしまいました。調べてみましたが定義をしてループに渡す流れ、そしてyieldは一旦処理を止めるものなのですね。sleep関数も勉強になりました。他の言語だとずばりこのような関数があるのですね。前回の質問への回答もありがとうございます。(ちょっと違う処理を間にはさんでくださっていてありがとうございます)rejectされたときの場合の処理も記述した方がいいことも理解しました。全体的に恐らく運用管理面についても考慮されているソースをのだろうなという印象を受けました。本当にありがとうございました!とても丁寧なご回答感謝いたします。ジェネレーターのことは初めて知りました。(function*)←一瞬間違いかと思ってしまいました。調べてみましたが定義をしてループに渡す流れ、そしてyieldは一旦処理を止めるものなのですね。sleep関数も勉強になりました。他の言語だとずばりこのような関数があるのですね。前回の質問への回答もありがとうございます。rejectされたときの場合の処理も記述した方がいいことも理解しました。全体的に恐らく運用管理面についても考慮されているソースをのだろうなという印象を受けました。15:23昨今のJavaScriptを使った開発ではまだブラウザーに実装されていないJavaScriptの新機能を使えるようにbabelといったコンパイラーやwebpackなどのバンドラーを通して、ブラウザで実行可能なコードに変換をすることが多いです。それらを使えばJSの新機能を積極的に使うことが出来るので、興味があれば調べてみると良いかもしれません。昨今のJavaScriptを使った開発ではまだブラウザーに実装されていないJavaScriptの新機能を使えるようにbabelといったコンパイラーやwebpackなどのバンドラーを通して、ブラウザで実行可能なコードに変換をすることが多いです。それらを使えばJSの新機能を積極的に使うことが出来るので、興味があれば調べてみると良いかもしれません。22:59実務の場ではそのような感じでES6を取り入れていっているのですね。ご回答いただいた内容が色々と調べるのに良いとっかかりになりそうです。再度、本当にありがとうございました!実務の場ではそのような感じでES6を取り入れていっているのですね。ご回答いただいた内容が色々と調べるのに良いとっかかりになりそうです。再度、本当にありがとうございました!キャンセル完了するlink+5async-awaitを使えば、「非同期な無限ループ」も、ものすごくすっきり書けます。use)、そういう環境ではBabelなどで変換することが必要です。Promiseの結果をawaitで「待たせて」います)、fetchがPromiseで結果を返すなど、JavaScriptの基盤に組み込まれつつある機能です。11が未対応という問題がありますが、Promiseだけであれば比較的容易にPolyfillできますし、「Promiseにして書きやすい」のであれば積極的に使っていっていいのではないかと思います。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。14:51ご回答ありがとうございます。新しい記述でここまでスッキリ書けるのですね。babelで変換してみたところとても長いコードになりました。変換しただけでは動作しないのですが、Polyfillを利用すれば使えるようになるということですね。ここまで簡潔に書けるのならばはやく素の状態でIEも対応してくれれば本当に嬉しいのですが。ご回答ありがとうございます。新しい記述でここまでスッキリ書けるのですね。babelで変換してみたところとても長いコードになりました。変換しただけでは動作しないのですが、Polyfillを利用すれば使えるようになるということですね。ここまで簡潔に書けるのならばはやく素の状態でIEも対応してくれれば本当に嬉しいのですが。14:56残念ながら、IEはもはや新バージョンが出ませんので、諦めるしかなさそうです。残念ながら、IEはもはや新バージョンが出ませんので、諦めるしかなさそうです。15:02確かにそうでした。恥ずかしいッ!!edgeだと動いてくれますね。恥ずかしいッ!!edgeだと動いてくれますね。キャンセル完了するlink+4未検証ですが、参考までに。5000]]);検索しているとこのような処理に「Promise」を使用することをすすめている記事が多く、お勧めされる理由は読みましたか。現在の要件を踏まえて、他の方法とPromiseを比較検討した上でPromiseが最良と判断していますか。選択するのは間違っていると私は思います。私はこの条件であれば、再帰関数を選択します。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。15:06ご回答ありがとうございます。>お勧めされる理由は読みましたか。>現在の要件を踏まえて、他の方法とPromiseを比較検討した上でPromiseが最良と判断していますか。「新しいから」や「最良だと思ったから」というよりは、悲しいことにそもそもどのように記述していいかがわからず、一旦、Promiseで記述をしてみたといったところです。(とりあえずでも動くソースがあった方が回答してただきやすいのかなと思いまして)もちろんPromiseを勉強してみたいというのもありましたが、逆に話をややこしくしてしまったかもしれません。現在のスキルでは下記のように階層で書いていく方法しか持ち合わせておらず、調べると「お勧めされる理由」としてはこんな読みづらい記述をするならば「Promise」で見通し良く書きましょうといった内容が多く見受けられました。```setTimeout(function)...setTimeout(function)...setTimeout(function)...```ただ、質問の趣旨としては「知りたいこと」項目の-「複数の関数を時間差で実行してさらに繰り返す方法」の良い書き方を知りたい-「Promiseを選択するのは良いのか?」といったものなので、ご回答のような内容を待っていました。いただいたソースを参考に記述をしてみました。(変なソースじゃないですかね..)これだと入れ子にならずに済みますね。{console.log('飲む');}```ご回答ありがとうございます。>お勧めされる理由は読みましたか。>現在の要件を踏まえて、他の方法とPromiseを比較検討した上でPromiseが最良と判断していますか。「新しいから」や「最良だと思ったから」というよりは、悲しいことにそもそもどのように記述していいかがわからず、一旦、Promiseで記述をしてみたといったところです。Promiseを勉強してみたいというのもありましたが、逆に話をややこしくしてしまったかもしれません。現在のスキルでは下記のように階層で書いていく方法しか持ち合わせておらず、調べると「お勧めされる理由」としてはこんな読みづらい記述をするならば「Promise」で見通し良く書きましょうといった内容が多く見受けられました。いったものなので、ご回答のような内容を待っていました。いただいたソースを参考に記述をしてみました。これだと入れ子にならずに済みますね。頂いたご意見への回答は行っておりません。