使用多个异步调用管理队列

时间:2013-08-21 16:24:17

标签: javascript asynchronous queue

我正在用JavaScript编写一个队列,它将由几个“服务器”异步处理。我担心两个服务器可能从队列中检索相同的项目。它现在似乎没有发生,但我不想让它失去机会。据我所知,JavaScript是单线程的;是否允许假设即使同时存在多个请求,JavaScript也会使用它自己的队列来执行该函数?

function getJob() {
  if(jobs.length > 0) {
      var job = jobs.shift();
      $('#jobStatsQueueCount').text(jobs.length);
      return job;
  } else {
      return null;
  }
}

以下是完整代码:

http://jsfiddle.net/L7yaB/5/

1 个答案:

答案 0 :(得分:0)

  

JavaScript是单线程的;是否允许假设即使同时会有多个请求

“同时”在计算机领域不存在。总有一些订单。

如果你点击两次,你会得到两个onclick事件,一个接一个。即使您的浏览器在您点击时很忙,它们仍会一个接一个地发生,并按照相同的顺序解雇它们。这是你可以假设的:事件永远不会相互竞争,超越或交错。

由于没有事件交错,你永远不会冒着常见的线程错误的风险,就像你建议的那样,即使shift不是原子的(它可能不是,但是它也没关系)。