more compact async to generator helper

This commit is contained in:
Sebastian McKenzie 2015-01-22 17:19:22 +11:00
parent b9b1a44c28
commit c4fb5a5e40
3 changed files with 44 additions and 65 deletions

View File

@ -2,36 +2,27 @@
return function () {
var gen = fn.apply(this, arguments);
return new Promise(function (resolve, reject) {
function step(getNext) {
var next;
return new Promise(function(resolve, reject) {
var callNext = step.bind(gen.next);
var callThrow = step.bind(gen.throw);
function step(arg) {
try {
next = getNext();
} catch(e) {
reject(e);
var info = this(arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (next.done) {
resolve(next.value);
return;
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(callNext, callThrow);
}
Promise.resolve(next.value).then(function (v) {
step(function () {
return gen.next(v);
});
}, function (e) {
step(function () {
return gen["throw"](e);
});
});
}
step(function () {
return gen.next();
});
callNext();
});
}
};
})

View File

@ -5,34 +5,28 @@ var _asyncToGenerator = function (fn) {
var gen = fn.apply(this, arguments);
return new Promise(function (resolve, reject) {
function step(getNext) {
var next;
var callNext = step.bind(gen.next);
var callThrow = step.bind(gen["throw"]);
function step(arg) {
try {
next = getNext();
} catch (e) {
reject(e);
var info = this(arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (next.done) {
resolve(next.value);
return;
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(callNext, callThrow);
}
Promise.resolve(next.value).then(function (v) {
step(function () {
return gen.next(v);
});
}, function (e) {
step(function () {
return gen["throw"](e);
});
});
}
step(function () {
return gen.next();
});
callNext();
});
};
};

View File

@ -5,34 +5,28 @@ var _asyncToGenerator = function (fn) {
var gen = fn.apply(this, arguments);
return new Promise(function (resolve, reject) {
function step(getNext) {
var next;
var callNext = step.bind(gen.next);
var callThrow = step.bind(gen["throw"]);
function step(arg) {
try {
next = getNext();
} catch (e) {
reject(e);
var info = this(arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (next.done) {
resolve(next.value);
return;
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(callNext, callThrow);
}
Promise.resolve(next.value).then(function (v) {
step(function () {
return gen.next(v);
});
}, function (e) {
step(function () {
return gen["throw"](e);
});
});
}
step(function () {
return gen.next();
});
callNext();
});
};
};