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; | |
} | |
}; | |
} | |