从JavaScript数组执行多个回调
Execute multiple callbacks from a JavaScript array
我有一个回调数组,这样每个回调都接受另一个回调,当作业完成时执行。例子:
var queue = [
function (done) {
console.log('Executing first job');
setTimeout(done, 1000); // actually an AJAX call here
// I can't call abort() for the request
},
function (done) {
console.log('Executing second job');
setTimeout(done, 1000);
// also AJAX call here
// it is made from a third-party library that I can't change
// this means that I can't call abort() on it
},
function (done) {
console.log('Executing third job');
setTimeout(done, 1000);
},
function (done) {
console.log('Executing fourth job');
setTimeout(done, 1000);
} // and so forth
];
var proceed = true;
(function dequeue() {
var fn = queue.shift();
proceed && fn instanceof Function && fn(dequeue);
})();
这对我来说很好,除了加快一切,我最好一次启动四个回调,同时仍然能够通过从其他地方更改proceed
标志来停止进一步执行。我怎么做呢?
我在这个项目中使用了最新版本的jQuery,所以如果库中有任何东西可以帮助我完成这个任务,我会使用它。
http://jsfiddle.net/2Jg6r/
var queue = [];
// let's think we have a thousand of jobs
for (var i = 0; i < 1000; i++) {
(function(jobNumber) {
queue.push(function (done) {
console.log('Started job '+ jobNumber);
setTimeout(function() {
console.log('Finished job '+ jobNumber);
done();
}, 1000);
});
})(i);
}
var proceed = true;
setTimeout(function() {
console.log('Full stop called after 10 seconds');
proceed = false;
}, 10000);
queue.depth = 0;
queue.maxDepth = 4;
(function dequeue() {
while (queue.depth < queue.maxDepth) {
queue.depth += 1;
var fn = queue.shift();
proceed && fn instanceof Function && fn(function() {
queue.depth -= 1;
dequeue();
});
}
})();
相关文章:
- 如何在回调函数中执行流
- 如何在`window.open`之后执行回调
- 等待回调函数执行
- 带有Spring的$.getJSON未执行回调
- bookmarklet中的jQuery.getScript()进行回调,但没有成功执行插件
- Dojo AMD加载程序执行定义具有空/缺失依赖项的回调
- 不同'单击'不同脚本中的回调:我可以控制执行顺序吗
- TypeError:执行回调时,回调不是函数
- Javascript:对回调创建的对象执行方法
- AJAX成功回调-执行javascript时出现问题
- nodeJS中的承诺/承诺中的回调/执行顺序是不对的
- 主干:中止以前的路由器回调执行
- 控制器函数作为回调执行
- 函数/回调执行可以被外部调用中断吗?
- React setState回调执行序列
- 一个关于nodejs回调执行顺序问题的例子,我不能理解
- 禁用返回按钮,直到回调执行
- 回调函数内部声明的变量是否保留在内存中,还是在回调执行结束时销毁?
- 在javascript中,使用回调执行多个异步函数的最佳实践是什么?
- Javascript中的回调执行序列,从IndexeddB检索