SyntaxError: Выражение await/yield нельзя использовать в параметре
Исключение JavaScript "await expression can't be used in parameter" или "yield expression can't be used in parameter" возникает, когда выражение параметра по умолчанию содержит ключевое слово await или yield и приводит к приостановке вычисления параметра по умолчанию.
Сообщение
SyntaxError: Illegal await-expression in formal parameters of async function (V8-based) SyntaxError: await expression can't be used in parameter (Firefox) SyntaxError: Cannot use 'await' within a parameter default expression. (Safari) SyntaxError: Yield expression not allowed in formal parameter (V8-based) SyntaxError: yield expression can't be used in parameter (Firefox) SyntaxError: Unexpected keyword 'yield'. Cannot use yield expression within parameters. (Safari)
Тип ошибки
Что пошло не так?
Выражение по умолчанию должно иметь возможность вычисляться синхронно. Если оно содержит выражение await или yield, это приостановит вычисление выражения по умолчанию, что недопустимо.
Примечание: Эта ошибка генерируется только тогда, когда await или yield являются допустимыми операторами в данном контексте функции. В противном случае await или yield были бы разобраны как идентификатор и либо не вызвали бы ошибку, либо вызвали бы ошибку типа "зарезервированный идентификатор" ("reserved identifier"), или "неожиданный токен" ("unexpected token"), если за ним следует выражение.
Примеры
Недопустимые случаи
function *gen(a = yield 1) {}
async function f(a = await Promise.resolve(1)) {}
Допустимые случаи
Вместо этого вы можете использовать присваивание объединения с null, чтобы предоставить значение по умолчанию. Если вы хотите обрабатывать null и undefined по-разному, вам нужно будет использовать условие.
function* gen(a) {
a ??= yield 1;
}
async function f(a) {
a ??= await Promise.resolve(1);
}
Вам также разрешено использовать await или yield, если выражение содержится в выражении функции инициализатора и не приостанавливает вычисление выражения по умолчанию.
async function f(a = (async () => await Promise.resolve(1))()) {}
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/await_yield_in_parameter