语法错误:在参数中不能使用 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
将被解析为标识符,并且要么不会导致错误,要么如果后面有表达式,则会导致类似“保留标识符”或“意外标记”的错误。
示例
无效情况
js
function *gen(a = yield 1) {}
async function f(a = await Promise.resolve(1)) {}
有效情况
您可以使用 空值合并赋值 来提供默认值。如果您想以不同的方式处理 null
和 undefined
,则需要使用条件。
js
function* gen(a) {
a ??= yield 1;
}
async function f(a) {
a ??= await Promise.resolve(1);
}
如果表达式包含在初始化程序的函数表达式中并且不会暂停默认表达式的评估,则您也可以使用 await
或 yield
。
js
async function f(a = (async () => await Promise.resolve(1))()) {}