UNPKG

941 BJavaScriptView Raw
1
2var Q = require("./q");
3
4module.exports = Queue;
5function Queue() {
6 var ends = Q.defer();
7 var closed = Q.defer();
8 return {
9 put: function (value) {
10 var next = Q.defer();
11 ends.resolve({
12 head: value,
13 tail: next.promise
14 });
15 ends.resolve = next.resolve;
16 },
17 get: function () {
18 var result = ends.promise.get("head");
19 ends.promise = ends.promise.get("tail");
20 return result.fail(function (error) {
21 closed.resolve(error);
22 throw error;
23 });
24 },
25 closed: closed.promise,
26 close: function (error) {
27 error = error || new Error("Can't get value from closed queue");
28 var end = {head: Q.reject(error)};
29 end.tail = end;
30 ends.resolve(end);
31 return closed.promise;
32 }
33 };
34}
35