@@ -130,7 +130,7 @@
return { __await: arg };
};
- function AsyncIterator(generator) {
+ function AsyncIterator(generator, PromiseImpl) {
function invoke(method, arg, resolve, reject) {
var record = tryCatch(generator[method], generator, arg);
if (record.type === "throw") {
@@ -141,14 +141,14 @@
if (value &&
typeof value === "object" &&
hasOwn.call(value, "__await")) {
- return Promise.resolve(value.__await).then(function(value) {
+ return PromiseImpl.resolve(value.__await).then(function(value) {
invoke("next", value, resolve, reject);
}, function(err) {
invoke("throw", err, resolve, reject);
});
}
- return Promise.resolve(value).then(function(unwrapped) {
+ return PromiseImpl.resolve(value).then(function(unwrapped) {
// When a yielded Promise is resolved, its final value becomes
// the .value of the Promise<{value,done}> result for the
// current iteration.
@@ -166,7 +166,7 @@
function enqueue(method, arg) {
function callInvokeWithMethodAndArg() {
- return new Promise(function(resolve, reject) {
+ return new PromiseImpl(function(resolve, reject) {
invoke(method, arg, resolve, reject);
});
}
@@ -206,9 +206,12 @@
// Note that simple async functions are implemented on top of
// AsyncIterator objects; they just return a Promise for the value of
// the final result produced by the iterator.
- exports.async = function(innerFn, outerFn, self, tryLocsList) {
+ exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
+ if (PromiseImpl === void 0) PromiseImpl = Promise;
+
var iter = new AsyncIterator(
- wrap(innerFn, outerFn, self, tryLocsList)
+ wrap(innerFn, outerFn, self, tryLocsList),
+ PromiseImpl
);
return exports.isGeneratorFunction(outerFn)