私は、次の場所に投稿された非同期の each() 関数プラグイン コードを使用しています。
うまく機能しますが、return を使用して実行中のコールバック関数を終了できないようです。または true を返します。その結果、「終了」の条件が満たされると、残りのすべての $.forEach 「ループ」実行が停止します。
プラグインは setTimeout ループ アプローチを実装しているため、既に実行中の setTimeout コールバック関数を終了する方法を知る必要があるだけでしょうか? ところで-大きなjson処理が発生している間、ブラウザのロックアップを避けるために、 for ループまたは $.each() の使用を避けています。ループを「バックグラウンド化」すると、UI のパフォーマンスが大幅に向上します。
$.forEach(json, 1000, function(idx,item) {
if(some_condition) return true; //exit this timeout iteration
//otherwise do something
});
jQuery.forEach = function (in_array, in_pause_ms, in_callback)
{
if (!in_array.length) return; // make sure array was sent
var i = 0; // starting index
bgEach(); // call the function
function bgEach()
{
if (in_callback.call(in_array[i], i, in_array[i]) !== false)
{
i++; // move to next item
if (i < in_array.length) setTimeout(bgEach, in_pause_ms);
}
}
return in_array; // returns array
};
jQuery.fn.forEach = function (in_callback, in_optional_pause_ms)
{
if (!in_optional_pause_ms) in_optional_pause_ms = 10; // default
return jQuery.forEach(this, in_optional_pause_ms, in_callback); // run it
};
どうもありがとう!