blear.classes.queue

1Introduction

我们认为的队列,可以抽象成一个数组,比如[1, 2, 3, 4, 5]。 在执行这个队列的时候,可以通过并发数量的控制,来决定当前能取出几个数字。

为了更好的理解本文档,我们将定义几个术语。

  • 队列(queue):一个有序的数组,里面包含了需要执行的工作(work)。 队列执行的时候,是按照先进先出的原则进行的。
  • 工作(work):队列的每一项就是每一个 work,每一个 work 必须是一个回调函数。 队列在执行的过程当中,不关心 work 的工作结果,只关心工作是否结束。

2Example

var Queue = require('blear.classes.queue');

var q = new Queue();

q.push(function work(done) {
    setTimeout(function () {
        done();
    }, 100);
});

q.push(function work(done) {
    setTimeout(function () {
        done();
    }, 100);
});

q.start();

3Static

3.1.defaults

  • 类型:Object
  • 说明:默认配置

3.2.defaults.concurrence

  • 类型:Number
  • 说明:并发数量。如下图,从左边的 waiting list 取出元素到右边的 running list,右边最多能盛放的数量就是并发数量。
  • 默认:1

3.3.defaults.infinite

  • 类型:Boolean
  • 说明:是否无限长度队列。 无限队列的意思是,队列运行之后一直处于运行状态,只要有新的 work 进来,就可以继续运行。 而有限队列的意思是,队列运行之后就不能添加新的 work 进来。
  • 默认:false

4new Queue(options)

实例化一个队列,options 为入参,默认值为 .defaults

5Prototype

5.1#push(work): this

往队列尾部添加工作。

5.1.1work

  • 类型:Function
  • 说明:工作,包含回调的函数
    q.push(function work(done) {
      setTimeout(function () {
          done();
      }, 100);
    })
    

5.2#unshift(work): this

往队列首部添加工作。

5.2.1work

  • 类型:Function
  • 说明:工作,包含回调的函数
    q.unshift(function work(done) {
      setTimeout(function () {
          done();
      }, 100);
    })
    

5.3#start(): this

开始执行队列。

5.4#pause(): this

暂停执行队列。

5.5#resume(): this

恢复执行队列(同#start())。

5.6#clear(): this

清除队列。

5.7#stop(): this

停止队列。

5.8#destroy()

销毁实例。

6Events

6.1beforeWork(work)

工作开始之前触发。

6.1.1work

  • 类型:Function
  • 说明:工作

6.2afterWork(work)

工作开始之后触发。

6.2.1work

  • 类型:Function
  • 说明:工作

6.3end()

队列全部结束之后触发。该事件触发条件:

  • 队列执行模式是有限的(即:infinite=false)。
  • 队列执行列表为空(全部执行完毕或被清除)。

7Dependencies

8Reference