forked from kriskowal/gtor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
task-queue.js
47 lines (38 loc) · 953 Bytes
/
task-queue.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"use strict";
var Task = require("./task");
module.exports = TaskQueue;
function TaskQueue(values) {
if (!(this instanceof TaskQueue)) {
return new TaskQueue();
}
var self = this;
var ends = new this.Task;
this.put = function (value) {
var next = self.Task.defer();
ends.resolve({
head: value,
tail: next.out
});
ends.resolve = next.resolve;
};
this.get = function () {
var result = ends.out.get("head");
ends.out = ends.out.get("tail");
return result;
};
if (values) {
values.forEach(this.put, this);
}
}
TaskQueue.prototype.Task = Task;
TaskQueue.prototype.forEach = function (callback, thisp) {
var self = this;
function next() {
return self.get()
.then(function (value) {
return callback.call(thisp, value);
})
.then(next);
}
return next();
};