Show More
Commit Description:
fix wrong merge
Commit Description:
fix wrong merge
References:
File last commit:
Show/Diff file:
Action:
node_modules/babel-runtime/helpers/asyncGenerator.js
| 125 lines
| 2.7 KiB
| application/javascript
| JavascriptLexer
|
r789 | "use strict"; | ||
exports.__esModule = true; | |||
var _symbol = require("../core-js/symbol"); | |||
var _symbol2 = _interopRequireDefault(_symbol); | |||
var _promise = require("../core-js/promise"); | |||
var _promise2 = _interopRequireDefault(_promise); | |||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | |||
exports.default = function () { | |||
function AwaitValue(value) { | |||
this.value = value; | |||
} | |||
function AsyncGenerator(gen) { | |||
var front, back; | |||
function send(key, arg) { | |||
return new _promise2.default(function (resolve, reject) { | |||
var request = { | |||
key: key, | |||
arg: arg, | |||
resolve: resolve, | |||
reject: reject, | |||
next: null | |||
}; | |||
if (back) { | |||
back = back.next = request; | |||
} else { | |||
front = back = request; | |||
resume(key, arg); | |||
} | |||
}); | |||
} | |||
function resume(key, arg) { | |||
try { | |||
var result = gen[key](arg); | |||
var value = result.value; | |||
if (value instanceof AwaitValue) { | |||
_promise2.default.resolve(value.value).then(function (arg) { | |||
resume("next", arg); | |||
}, function (arg) { | |||
resume("throw", arg); | |||
}); | |||
} else { | |||
settle(result.done ? "return" : "normal", result.value); | |||
} | |||
} catch (err) { | |||
settle("throw", err); | |||
} | |||
} | |||
function settle(type, value) { | |||
switch (type) { | |||
case "return": | |||
front.resolve({ | |||
value: value, | |||
done: true | |||
}); | |||
break; | |||
case "throw": | |||
front.reject(value); | |||
break; | |||
default: | |||
front.resolve({ | |||
value: value, | |||
done: false | |||
}); | |||
break; | |||
} | |||
front = front.next; | |||
if (front) { | |||
resume(front.key, front.arg); | |||
} else { | |||
back = null; | |||
} | |||
} | |||
this._invoke = send; | |||
if (typeof gen.return !== "function") { | |||
this.return = undefined; | |||
} | |||
} | |||
if (typeof _symbol2.default === "function" && _symbol2.default.asyncIterator) { | |||
AsyncGenerator.prototype[_symbol2.default.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); | |||
}; | |||
return { | |||
wrap: function wrap(fn) { | |||
return function () { | |||
return new AsyncGenerator(fn.apply(this, arguments)); | |||
}; | |||
}, | |||
await: function _await(value) { | |||
return new AwaitValue(value); | |||
} | |||
}; | |||
}(); |