异步函数可以在 class 字段中吗?
Can async functions be in class fields?
考虑以下片段:
class Foo {
method = () => {
console.log('method');
}
}
const f = new Foo();
f.method();
工作正常。但是,如果函数改为异步,没有其他更改:
class Foo {
method = async () => {
console.log('method');
}
}
const f = new Foo();
f.method();
这会导致语法错误。无论是否使用箭头函数都会发生:
class Foo {
method = function() {
console.log('method');
}
}
const f = new Foo();
f.method();
class Foo {
method = async function() {
console.log('method');
}
}
const f = new Foo();
f.method();
是我的语法不正确,还是在 class 字段中简单地禁止了异步函数?
(当然,原型上的普通异步方法也是可能的,但我要求 why/how class 字段中的异步函数可以工作)
采纳评论async method() => {
的建议也不行:
class Foo {
async method() => {
console.log('method');
}
}
const f = new Foo();
f.method();
问:这对你有用吗:
class Foo {
async method () {
console.log('method');
}
}
const f = new Foo();
f.method();
根据 mozilla 这种语法在 IE 中不受支持,我猜测你在那里遇到了错误,你的第二个示例工作在 chrome.
中打招呼
class Foo {
method = async () => {
console.log('method');
}
}
const f = new Foo();
f.method();
Can async functions be in class fields?
是的。
//Without BabelJS / ES2015
class Foo {
method = async () => {
console.log('method');
}
}
const f = new Foo();
f.method();
Can async functions be in class fields when using an ES2015 transpiler?
没有。
//Without BabelJS / ES2015
class Foo {
method = async () => {
console.log('method');
}
}
const f = new Foo();
f.method();
async
与 ECMAScript 2017 (ECMA-262) 一起引入。
在您的代码片段中,您启用了 Use Babel / ES2015,早于 async
。
考虑以下片段:
class Foo {
method = () => {
console.log('method');
}
}
const f = new Foo();
f.method();
工作正常。但是,如果函数改为异步,没有其他更改:
class Foo {
method = async () => {
console.log('method');
}
}
const f = new Foo();
f.method();
这会导致语法错误。无论是否使用箭头函数都会发生:
class Foo {
method = function() {
console.log('method');
}
}
const f = new Foo();
f.method();
class Foo {
method = async function() {
console.log('method');
}
}
const f = new Foo();
f.method();
是我的语法不正确,还是在 class 字段中简单地禁止了异步函数?
(当然,原型上的普通异步方法也是可能的,但我要求 why/how class 字段中的异步函数可以工作)
采纳评论async method() => {
的建议也不行:
class Foo {
async method() => {
console.log('method');
}
}
const f = new Foo();
f.method();
问:这对你有用吗:
class Foo {
async method () {
console.log('method');
}
}
const f = new Foo();
f.method();
根据 mozilla 这种语法在 IE 中不受支持,我猜测你在那里遇到了错误,你的第二个示例工作在 chrome.
中打招呼class Foo {
method = async () => {
console.log('method');
}
}
const f = new Foo();
f.method();
Can async functions be in class fields?
是的。
//Without BabelJS / ES2015
class Foo {
method = async () => {
console.log('method');
}
}
const f = new Foo();
f.method();
Can async functions be in class fields when using an ES2015 transpiler?
没有。
//Without BabelJS / ES2015
class Foo {
method = async () => {
console.log('method');
}
}
const f = new Foo();
f.method();
async
与 ECMAScript 2017 (ECMA-262) 一起引入。
在您的代码片段中,您启用了 Use Babel / ES2015,早于 async
。