1Introduction
- description:队列类
- author:ydr.me
- create:2018年05月07日10:12:42
- update:2018年05月10日17:20:00
- github:https://github.com/blearjs/blear.classes.queue
我们认为的队列,可以抽象成一个数组,比如[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
)。 - 队列执行列表为空(全部执行完毕或被清除)。