58 lines
1.0 KiB
58 lines
1.0 KiB
function _asyncGeneratorDelegate(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) { |
|
if (waiting) { |
|
waiting = false; |
|
return value; |
|
} |
|
|
|
return pump("return", value); |
|
}; |
|
} |
|
|
|
return iter; |
|
} |
|
|
|
module.exports = _asyncGeneratorDelegate; |