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.
		
		
		
		
		
			
		
			
				
					36 lines
				
				941 B
			
		
		
			
		
	
	
					36 lines
				
				941 B
			| 
											3 years ago
										 | 
 | ||
|  | 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; | ||
|  |         } | ||
|  |     }; | ||
|  | } | ||
|  | 
 |