123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- export default (function (inner, awaitWrap) {
- var iter = {},
- waiting = false;
- function pump(key, value) {
- waiting = true;
- value = new Promise(function (resolve) {
- resolve(inner[key](value));
- });
- return {
- done: false,
- value: awaitWrap(value)
- };
- }
- ;
- if (typeof Symbol === "function" && Symbol.iterator) {
- iter[Symbol.iterator] = function () {
- return this;
- };
- }
- iter.next = function (value) {
- if (waiting) {
- waiting = false;
- return value;
- }
- return pump("next", value);
- };
- if (typeof inner.throw === "function") {
- iter.throw = function (value) {
- if (waiting) {
- waiting = false;
- throw value;
- }
- return pump("throw", value);
- };
- }
- if (typeof inner.return === "function") {
- iter.return = function (value) {
- return pump("return", value);
- };
- }
- return iter;
- });
|