异步函数可以在类字段中吗?

时间:2019-02-22 02:30:17

标签: javascript

请考虑以下代码段:

import numpy as np
from scipy.interpolate import splprep, splev
import matplotlib.pyplot as plt

X = np.array([1, 3, 6, 8, 5])
Y = np.array([1, 8, 4, 4, 1])
pts = np.vstack((X, Y))
# Find the B-spline representation of an N-dimensional curve
tck, u = splprep(pts, s=0.0)
u_new = np.linspace(u.min(), u.max(), 1000)
# Evaluate a B-spline
x_new, y_new = splev(u_new, tck)

plt.plot(x_new, y_new, 'b--')
plt.show()

工作正常。但是,如果该函数改为异步执行,则没有其他更改:

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();的评论建议也不起作用:

async method() => {

3 个答案:

答案 0 :(得分:2)

问:这对您有用吗?

class Foo {
  async method () {
    console.log('method');
  }
}
const f = new Foo();
f.method();

答案 1 :(得分:2)

  

异步函数可以在类字段中吗?

是的

//Without BabelJS / ES2015
class Foo {
  method = async () => {
    console.log('method');
  }
}
const f = new Foo();
f.method();

  

使用ES2015编译器时,异步函数是否可以在类字段中

不。

//Without BabelJS / ES2015
class Foo {
  method = async () => {
    console.log('method');
  }
}
const f = new Foo();
f.method();

asyncECMAScript 2017 (ECMA-262)一起引入。

在代码段中,您启用了使用Babel / ES 2015 ,该日期早于async

答案 2 :(得分:1)

根据mozilla,IE中不支持此语法,因为这可能是您在此处出现错误,第二个示例工作是在chrome中。

class Foo {
  method = async () => {
    console.log('method');
  }
}
const f = new Foo();
f.method();