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