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.
		
		
		
		
		
			
		
			
				
					
					
						
							64 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							64 lines
						
					
					
						
							2.0 KiB
						
					
					
				| var OverloadYield = require("./OverloadYield.js");
 | |
| function AsyncGenerator(gen) {
 | |
|   var front, back;
 | |
|   function resume(key, arg) {
 | |
|     try {
 | |
|       var result = gen[key](arg),
 | |
|         value = result.value,
 | |
|         overloaded = value instanceof OverloadYield;
 | |
|       Promise.resolve(overloaded ? value.v : value).then(function (arg) {
 | |
|         if (overloaded) {
 | |
|           var nextKey = "return" === key ? "return" : "next";
 | |
|           if (!value.k || arg.done) return resume(nextKey, arg);
 | |
|           arg = gen[nextKey](arg).value;
 | |
|         }
 | |
|         settle(result.done ? "return" : "normal", arg);
 | |
|       }, function (err) {
 | |
|         resume("throw", err);
 | |
|       });
 | |
|     } catch (err) {
 | |
|       settle("throw", err);
 | |
|     }
 | |
|   }
 | |
|   function settle(type, value) {
 | |
|     switch (type) {
 | |
|       case "return":
 | |
|         front.resolve({
 | |
|           value: value,
 | |
|           done: !0
 | |
|         });
 | |
|         break;
 | |
|       case "throw":
 | |
|         front.reject(value);
 | |
|         break;
 | |
|       default:
 | |
|         front.resolve({
 | |
|           value: value,
 | |
|           done: !1
 | |
|         });
 | |
|     }
 | |
|     (front = front.next) ? resume(front.key, front.arg) : back = null;
 | |
|   }
 | |
|   this._invoke = function (key, arg) {
 | |
|     return new Promise(function (resolve, reject) {
 | |
|       var request = {
 | |
|         key: key,
 | |
|         arg: arg,
 | |
|         resolve: resolve,
 | |
|         reject: reject,
 | |
|         next: null
 | |
|       };
 | |
|       back ? back = back.next = request : (front = back = request, resume(key, arg));
 | |
|     });
 | |
|   }, "function" != typeof gen["return"] && (this["return"] = void 0);
 | |
| }
 | |
| AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function () {
 | |
|   return this;
 | |
| }, AsyncGenerator.prototype.next = function (arg) {
 | |
|   return this._invoke("next", arg);
 | |
| }, AsyncGenerator.prototype["throw"] = function (arg) {
 | |
|   return this._invoke("throw", arg);
 | |
| }, AsyncGenerator.prototype["return"] = function (arg) {
 | |
|   return this._invoke("return", arg);
 | |
| };
 | |
| module.exports = AsyncGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports; |