1

コードの実行を停止してから再開する方法はありますか? たとえば、次のコードはフラグ値が変更されるまで実行されず、その後再開されます。

編集: AJAX 要求のループを開始するコードがあり、ユーザーがブラウザーの他のタブにアクセスして停止するときにループを制御する必要があります (可能な場合はフラグを使用)。その後、ユーザーがアプリケーションに戻ると、ループが再開されます。

この問題はsetInterval、AJAX リクエストとそれらを停止するフラグで解決できます。しかし、私はMVCパターンを使用していて、モデルにajax関数があり、呼び出されたものがdeビューから行われるため、成功したajax関数からのAJAXリクエストのループを実行する方が正しいと思います。つまり、応答が完了したときです。 . そして、ループsetIntervalは間違った側で始まり ます

ただし、「setInterval」はAJAXと呼ばれる関数にある可能性があると考えています

4

1 に答える 1

1

多くの方法のいずれかを使用してブラウザータブが非アクティブになることを検出できます(JQueryを使用してドキュメントにフォーカスイベントとブラーイベントを設定するのが好きですが、他の手法もあります)が、探しているパターンはの代わりに「完了時に独自の新しいタイムアウトを設定するクロージャ」setInterval

var active = true;
function myloop()
{
    if (active)
    {
        $.ajax(/*...*/).done(function(j)
        {
            /* do stuff */ 
            window.setTimeout(myloop, interval);
        });
    }
}

このシナリオでは、タブまたはウィンドウが再びアクティブになるのを検出したときに、設定active = true してmyloop()再度呼び出す必要があります。タブが非アクティブになったら、を設定しactive = falseます。現在実行中のAJAXリクエストは安全に完了します。ただし、手動でループを再開するまで、それ以上の要求は行われません。

于 2013-01-10T19:08:49.600 に答える