asynchronousnodejs执行顺序

processItem何时开始执行。 一旦某些项目被推入队列,它是否会启动? 还是必须在队列中的第一个项目开始执行之前完成for循环?

var processItem = function (item, callback) { console.log(item) callback(); } var myQueue = async.queue(processItem, 2) for (index = 0; index < 1000; ++index) { myQueue.push(index) } 

简单的答案是你的所有任务将被添加到队列中,然后以随机(未定义)的顺序执行。


背景信息,通过https://github.com/caolan/async#queueworker-concurrency

队列(工作者,并发)

用指定的concurrency创build一个queue对象。 添加到队列中的任务将并行处理(达到concurrency限制)。 如果所有worker都在进行中,则task将排队等待,直到有人可用。 一旦一个工作者完成了一个task ,这个taskcallback被调用。


换句话说,订单是未定义的 。 如果您需要按特定顺序执行任务,则应该使用不同的asynchronous原语,如series(tasks, [callback]) https://github.com/caolan/async#seriestasks-callback

在任何asynchronous任务运行之前,当前调用堆栈必须parsing。 这意味着在任何asynchronous操作运行之前,当前函数必须运行到完成状态(加上任何调用该函数的函数等)。 要直接回答您的问题:所有项目将在第一个项目运行之前完全排队。

阅读关于JavaScript事件循环的更多信息可能会对您有所帮助:asynchronous作业位于事件队列中,并逐个处理它们。 事件队列中的每个作业都会导致创build调用堆栈(其中堆栈中的每个项目都是函数调用 – 第一个函数位于底部,第一个函数内部调用的函数接近底部等) 。 当堆栈被完全清除时,事件循环处理下一个事件。