パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

再帰呼び出し、よく使う?使わない?」記事へのコメント

  • Javascriptでajaxだして、その結果をみてまたajaxだして、...
    というプログラムは再帰にせざるを得ない。
    エディタが一畳分くらいの面積で全部を見渡せるほどの注意力があれば非同期ハンドラを入れ子にすればいいのかもしれないが。

    それ以外にもDOMトラバースとか、再帰でやる方がコードが見やすい。

    みんなもそうだよね?

    • by Anonymous Coward

      つ[Promise]

      • by Anonymous Coward

        だから、$.ajax()のdone()の中で$.ajaxが必要なら再帰になる。と言っているわけですが。

        • by Anonymous Coward

          だから、Promiseについて調べなさいと言っているのですが

          • by Anonymous Coward

            実行されるかわからないAjaxのpromiseを作ることは原理的にできない。
            よって、doneを評価した後再帰するしかない。

            • by Anonymous Coward

              別にループとif文でもいいと思うんだが。いったいどういうPromiseの使い方してるの? つーか本当に調べたの?

              • by Anonymous Coward

                そんじゃ、一分毎にAjaxだしてサーバーから”終わり”というデータが帰ってきたら処理を終わるJavascript書いてくれ。
                もちろん、いつ来るかは不明。

              • by Anonymous Coward on 2015年02月11日 22時14分 (#2759609)

                とりえあず自分の答え。問い合わせの回数が有限でなければこう書くしかない。
                #100なら100回$.ajax書き連ねるのか?という問題はあるけど。
                ##実際に走らせたわけじゃないのでちょっとしたエラーはあるかも。

                (function endlessAjax(){
                        $.ajax({まあ適当}).done(function(result){
                                if(result=="終わり"){
                                        console.log(result);
                                } else {
                                            setTimeout(function(){
                                                    this();
                                                    }.bind(endlessAjax), 一分);
                                            );
                                }
                        });
                )

                親コメント
              • そのコードは、「endlessAjax 関数内で、endlessAjax関数の実行予約(setTimeout)している」だけで、endlessAjaxの呼び出しはしていない。

                実際の呼び出しフローとしては、
                1) 何かをトリガーにendlessAjaxを呼び出す→すぐに実行処理終了(非同期)
                2) データが届くと、システムが、イベント設定された無名関数を呼び出す→すぐに実行処理終了
                3) 一分立ったら、システムが、イベント設定されたendlessAjaxを呼び出す→すぐに実行処理終了(非同期)
                →2に戻る
                という繰り返しで、全然再帰じゃないですよ。
                イベントドリブンな環境/システムだと、イベント処理では基本的に再帰は出てこないと思う。イベントを発生させても、キューに一旦溜まるだけなのが普通。

                #Win32APIのSendMessage なんかは、投げたメッセージがその場で処理されるので、再帰になりますね。無限ループにならないよう注意が必要…

                親コメント

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

処理中...