したがって、数百のアイテムをループ処理し、それぞれを処理している間は UI スレッドをブロックしたくありません。おそらく数秒の作業なので、頻繁に譲りたいと思います。いくつかの本は、次のようなループを推奨しています。
function processArray(items, process, callback){
var todo = items.concat(); //create a clone of the original
setTimeout(function () {
process(todo.shift());
if (todo.length > 0) {
setTimeout(arguments.callee, 100);
} else {
callback(items);
}
}, 100);
}
(参照http://answers.oreilly.com/topic/1506-yielding-with-javascript-timers/ )
前回、巧妙なループを使用したとき、アンダースコアが既にそれをサポートしており、おそらくより優れた、より安定したバージョンなどがあることがわかりました。アンダースコアで上記を行うにはどうすればよいですか? _.each は適用されないようです。_.each は一時停止時間を変更するためのオプションを生成または提供していないようです。