From d16f8111ea70562aee3ebcc19998c67f968b91be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Sun, 14 Nov 2021 02:02:35 +0100 Subject: [PATCH] Wait the correct number of ticks on nested `await` (#13961) --- .../src/index.js | 5 ----- .../async-to-generator/double-await/exec.js | 20 +++++++++++++++++++ .../async-to-generator/double-await/input.js | 3 +++ .../double-await/options.json | 5 +++++ .../async-to-generator/double-await/output.js | 10 ++++++++++ 5 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/exec.js create mode 100644 packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/input.js create mode 100644 packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/options.json create mode 100644 packages/babel-plugin-transform-async-to-generator/test/fixtures/async-to-generator/double-await/output.js 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); +}