blob: 1505fd0b369a44ee62081501b5a0454f11b9d918 [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001
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