gpt4 book ai didi

javascript - 我如何使用 underscore.js 进行屈服循环?

转载 作者:行者123 更新时间:2023-11-29 22:12:42 26 4
gpt4 key购买 nike

所以,我想遍历数百个项目,而不是在处理每个项目时阻塞 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/)

上次我使用了一个聪明的循环,我发现underscore已经支持它并且可能有更好,更稳定等版本。我如何在下划线中执行上述操作? _.each 似乎不适用,_.each 似乎没有屈服或提供更改暂停时间的选项。

最佳答案

查看异步库
https://github.com/caolan/async
并使 process 成为一个接受回调的异步函数。

function process(item, cb){
//replace this code block with your actual process logic
setTimeout(function () {console.log(item); async.nextTick(cb);}, 500);
}
function processArray(items, iterator, callback){
var todo = items.concat(); //create a clone of the original
async.eachLimit(todo, 4, iterator, function(){
//replace 4 with the desired number of simultaneous asynchronous operations
//if `process` isn't too computationally expensive, you could try 50
callback(); //all done
});
}

processArray([0,1,2,3,4,5,6,7,8,9,10], process, function(){
console.log('all done');
});

演示:http://jsbin.com/izumob/1/

关于javascript - 我如何使用 underscore.js 进行屈服循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17215578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com