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