【问题标题】:Calling super class' async method from async method in extending class在扩展类中从异步方法调用超类的异步方法
【发布时间】:2026-02-10 06:05:02
【问题描述】:

我正在编写 JavaScript (> ECMAScript 6),但我不知道如何在扩展类的方法中调用超类的异步方法。 这就是我想要做的:

class SuperClass {
    constructor(){}

    async method() {
        return;
    }
}

class ExtendClass extends SuperClass {
    constructor() {
        super();
    }

    async method() {
        return super.method();
    }
}

以上内容无法编译,报错:

SyntaxError: 'super' keyword unexpected here
    at Object.<anonymous> (Path/To/File.js:line:character)

我真的在尝试做一些不可能的事情吗?谷歌似乎没有任何有用的东西..

等待对超类的调用无济于事,使用不同的方法名称也无济于事 - 唯一有帮助的是使扩展类的方法非异步。

【问题讨论】:

  • 它在我的工作正常
  • 您使用的是哪个版本的节点?
  • v8.9.4 - 但是我正在使用一个名为 TestCafe 的测试框架;它使用 ECMAScript >= 6,所以它的行为应该如愿......嗯。
  • 它是一个语法错误,所以版本不支持这个功能。我认为你应该编译到 es5 并运行
  • 该测试框架是否进行任何类型的转换?

标签: javascript ecmascript-6 async-await ecmascript-2017 testcafe


【解决方案1】:

这是由于测试框架 TestCafe 中使用的转译(如@Bergi 所述)。我将把这个问题引向别处。感谢 cmets。

更新

这是目前 TestCafe 框架 (link to bug) 中的一个错误。 解决方法如下:

async method () {
    return await SuperClass.prototype.method.call(this)
}

【讨论】: