diff --git a/packages/babel-helper-remap-async-to-generator/src/index.js b/packages/babel-helper-remap-async-to-generator/src/index.js index d985743a07..88197fdcf5 100644 --- a/packages/babel-helper-remap-async-to-generator/src/index.js +++ b/packages/babel-helper-remap-async-to-generator/src/index.js @@ -19,11 +19,6 @@ const awaitVisitor = { AwaitExpression(path, { wrapAwait }) { const argument = path.get("argument"); - if (path.parentPath.isYieldExpression()) { - path.replaceWith(argument.node); - return; - } - path.replaceWith( yieldExpression( wrapAwait diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/exec.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/exec.js new file mode 100644 index 0000000000..656cd8adc4 --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/exec.js @@ -0,0 +1,20 @@ +const log = []; + +const p1 = (async function () { + log.push(1); + await await null; + log.push(2); +})(); + +const p2 = (async function () { + log.push(3); + await null; + log.push(4); +})(); + +log.push(5); +const p3 = Promise.resolve().then(() => log.push(6)).then(() => log.push(7)); + +return Promise.all([p1, p2, p3]).then(() => { + expect(log).toEqual([1, 3, 5, 4, 6, 2, 7]); +}); diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/input.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/input.js new file mode 100644 index 0000000000..aac8ac3fcb --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/input.js @@ -0,0 +1,3 @@ +async function fn() { + await await 1; +} diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/options.json b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/options.json new file mode 100644 index 0000000000..eeebc1a577 --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/options.json @@ -0,0 +1,5 @@ +{ + "parserOpts": { + "allowReturnOutsideFunction": true + } +} diff --git a/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/output.js b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/output.js new file mode 100644 index 0000000000..0caceca99a --- /dev/null +++ b/packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/output.js @@ -0,0 +1,10 @@ +function fn() { + return _fn.apply(this, arguments); +} + +function _fn() { + _fn = babelHelpers.asyncToGenerator(function* () { + yield yield 1; + }); + return _fn.apply(this, arguments); +}