varQ=require("./q");module.exports=Queue;functionQueue(){varends=Q.defer();varclosed=Q.defer();return{put:function(value){varnext=Q.defer();ends.resolve({head:value,tail:next.promise});ends.resolve=next.resolve;},get:function(){varresult=ends.promise.get("head");ends.promise=ends.promise.get("tail");returnresult.fail(function(error){closed.resolve(error);throwerror;});},closed:closed.promise,close:function(error){error=error||newError("Can't get value from closed queue");varend={head:Q.reject(error)};end.tail=end;ends.resolve(end);returnclosed.promise;}};}