javascript 使异步队列串行和同步

ej83mcc0  于 2023-01-08  发布在  Java
关注(0)|答案(2)|浏览(111)

我需要在我的代码中使用一个串行队列。我发现了一个由@jessetane制作的queue implementation,它被大量的项目使用。有人知道将并发参数设置为1是否会使队列串行和同步吗?谢谢

jvlzgdj9

jvlzgdj91#

将concurrency参数设置为1实际上会使队列串行化和同步化。
这将使它成为串行的,因为第一个作业需要在第二个作业开始之前先完成。
但是它不会使它同步--这是一件好事。
例如,如果将并发性设置为1,则和将执行以下命令:

q.push(function (cb) {
  setTimeout(function () {
    console.log('slow job finished')
    cb()
  }, 200)
})

q.push(function (cb) {
  console.log('simple')
  cb();
})

...则可以确保输出将具有以下顺序:

slow job finished
simple

这是 serial 的特性,但它不是同步的。如果您需要多一个输出语句,如下所示:

q.push(function (cb) {
  setTimeout(function () {
    console.log('slow job finished')
    cb()
  }, 200)
})

q.push(function (cb) {
  console.log('simple')
  cb();
})

console.log('hello')

...则输出将具有:

hello
slow job finished
simple

这表明作业是异步执行的,即在清空当前调用堆栈之后执行。

tzcvj98z

tzcvj98z2#

我想您误解了为什么将此队列设置为异步的
使队列异步的目的是让您可以等待新项目添加到队列中,同时JavaScript(通常使用单个线程)可以自由地执行其他操作,而不仅仅是等待项目出现在队列中

相关问题