You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
941 B
35 lines
941 B
|
|
var Q = require("./q"); |
|
|
|
module.exports = Queue; |
|
function Queue() { |
|
var ends = Q.defer(); |
|
var closed = Q.defer(); |
|
return { |
|
put: function (value) { |
|
var next = Q.defer(); |
|
ends.resolve({ |
|
head: value, |
|
tail: next.promise |
|
}); |
|
ends.resolve = next.resolve; |
|
}, |
|
get: function () { |
|
var result = ends.promise.get("head"); |
|
ends.promise = ends.promise.get("tail"); |
|
return result.fail(function (error) { |
|
closed.resolve(error); |
|
throw error; |
|
}); |
|
}, |
|
closed: closed.promise, |
|
close: function (error) { |
|
error = error || new Error("Can't get value from closed queue"); |
|
var end = {head: Q.reject(error)}; |
|
end.tail = end; |
|
ends.resolve(end); |
|
return closed.promise; |
|
} |
|
}; |
|
} |
|
|
|
|