From c4fb5a5e403e419ab6b440e55cc18a5a0378f463 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 22 Jan 2015 17:19:22 +1100 Subject: [PATCH] more compact async to generator helper --- .../templates/async-to-generator.js | 37 +++++++------------ .../expression/expected.js | 36 ++++++++---------- .../statement/expected.js | 36 ++++++++---------- 3 files changed, 44 insertions(+), 65 deletions(-) diff --git a/lib/6to5/transformation/templates/async-to-generator.js b/lib/6to5/transformation/templates/async-to-generator.js index aeacb62f04..f03547d2fe 100644 --- a/lib/6to5/transformation/templates/async-to-generator.js +++ b/lib/6to5/transformation/templates/async-to-generator.js @@ -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(); }); - } + }; }) diff --git a/test/fixtures/transformation/optional-async-to-generator/expression/expected.js b/test/fixtures/transformation/optional-async-to-generator/expression/expected.js index faf8868b28..cb5f6a8c4c 100644 --- a/test/fixtures/transformation/optional-async-to-generator/expression/expected.js +++ b/test/fixtures/transformation/optional-async-to-generator/expression/expected.js @@ -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(); }); }; }; diff --git a/test/fixtures/transformation/optional-async-to-generator/statement/expected.js b/test/fixtures/transformation/optional-async-to-generator/statement/expected.js index faf8868b28..cb5f6a8c4c 100644 --- a/test/fixtures/transformation/optional-async-to-generator/statement/expected.js +++ b/test/fixtures/transformation/optional-async-to-generator/statement/expected.js @@ -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(); }); }; };