ожидание вне асинхронной функции не выдает ошибку в консоли - PullRequest
0 голосов
/ 23 декабря 2018

MDN говорит: :

Помните, ключевое слово await допустимо только внутри async функций.Если вы используете его вне тела функции async, вы получите SyntaxError.

Но это не так.

Попробуйте этот код в консоли DevTools, ошибок нет, просто результат:

async function a(val) { return val; }
await a(10) // await is not inside async function
10

Что не так с кодом или документами?

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Все в порядке.

Вы нашли особенность консоли DevTools !Это , чтобы максимально упростить экспериментирование с async - await кодом в реальной среде.Вы можете себе представить, что любой код, который вы вводите в консоль, автоматически включается в функцию async.На самом деле, как указал другой ответ, именно это и происходит.

Важно отметить, что хотя это работает в консоли, это не является функцией JavaScript.

Итак,все ваши наблюдения верны и ожидаемы!Документы MDN точны, потому что если вы попытаетесь загрузить скрипт на страницу, которая использует await вне функции async, произойдет ошибка.С другой стороны, консоль DevTools предназначена для этой цели (исключительно для эргономики разработчика), поэтому ваш код работает без ошибок в консоли.

Это не единственный трюк консоли DevToolsимеет рукав .В общем, если вы действительно хотите проверить, как какой-то код выполняется на странице, лучше всего запускать скрипт на странице, а не в консоли.

0 голосов
/ 23 декабря 2018

Документы MDN верны и объясняют, как это работает в JavaScript.

Это просто функция, добавленная DevTools для упрощения тестирования асинхронного / ожидающего кода.И это не функция JavaScript.

Похоже, что он поддерживается с 08.11.2017 в DevTools:

https://chromium.googlesource.com/chromium/src.git/+/e8111c396fef38da6654093433b4be93bed01dce

Если вы шпионите за

ConsoleModel.js

в строке 129, они имеют функцию для вычисления выражений, помеченных как асинхронные:

async evaluateCommandInConsole
...