在Javascript中阻止队列

时间:2016-09-28 12:10:08

标签: javascript data-structures

我需要在Javascript中创建一个阻塞队列。 Array.prototype中有pop()shift()个方法,但描述说明了:

  

返回值:数组中的最后一个元素;如果数组为空,则 undefined

我需要一个返回undefined的方法,但要等到有一些要返回的元素。

目的是,我的代码由多个异步操作驱动,这些操作将元素推送到队列中,我需要处理它们。

1 个答案:

答案 0 :(得分:3)

使用推移的简单实现

function Queue() {
  this.listeners = [];
  this.queue = [];
}

Queue.prototype = {
  shift: function(cb) {
    this.queue.length > 0 ? cb(this.queue.shift()) : this.listeners.push(cb);
  },
  push: function(value) {
    if (this.listeners.length > 0) {
      this.listeners.shift()(value);
      return;
    }

    this.queue.push(value);
  }
}


var queue = new Queue();

// 'some value'
queue.shift(function(value) { console.log(value); });

setTimeout(function() { 
  queue.push('some value'); 
  queue.push('another value');

  // 'another value'
  queue.shift(function(value){ console.log(value); });
}, 3000);