Вызов асинхронного метода суперкласса из асинхронного метода в расширяющем классе

Я пишу 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)

Я действительно пытаюсь сделать что-то невозможное? Не могу найти ничего полезного в Google ..

Это не помогает ждать вызова суперкласса, это не помогает иметь разные имена методов - единственное, что помогает, - это сделать метод расширяющего класса неасинхронным.


person zniwalla    schedule 22.01.2018    source источник
comment
в моем работает нормально   -  person zabusa    schedule 22.01.2018
comment
какую версию узла вы используете?   -  person zabusa    schedule 22.01.2018
comment
v8.9.4 — однако я использую среду тестирования под названием TestCafe; он использует ECMAScript ›= 6, поэтому он должен вести себя так, как хотел.. хм.   -  person zniwalla    schedule 22.01.2018
comment
это синтаксическая ошибка. Так что версия не поддерживает эту функцию. Я думаю, вам следует скомпилировать в es5 и запустить   -  person zabusa    schedule 22.01.2018
comment
Но его можно скомпилировать без двух ключевых слов async. super не является проблемой, хотя это то, что он говорит.   -  person zniwalla    schedule 22.01.2018
comment
Он должен работать, как ожидалось. Даже если проблема реальна, она специфична для вашей среды, а вопрос подразумевает, что это не так.   -  person Estus Flask    schedule 22.01.2018
comment
Выполняет ли эта тестовая среда какую-либо транспиляцию?   -  person Bergi    schedule 22.01.2018
comment
Я думаю, он должен сделать какую-то транспиляцию. Вместо этого я перенесу это на их форум.   -  person zniwalla    schedule 22.01.2018
comment
Вероятно, ошибка возможна, если он был скомпилирован в ES6, потому что в этом случае асинхронные методы будут преобразованы и super появится не в том месте. Я думаю, изменение цели компиляции на ES5 решит эту проблему.   -  person Estus Flask    schedule 22.01.2018
comment
Я думаю, вы правы. Однако я не могу изменить цель компиляции.   -  person zniwalla    schedule 22.01.2018
comment
Я ожидаю, что можно отредактировать файл конфигурации Testcafe, чтобы каким-то образом принудительно установить es2015 Babel, это приведет к выводу ES5. Да, это вопрос по вопросам репозитория Testcafe.   -  person Estus Flask    schedule 22.01.2018
comment
Да, это звучит вероятно. Я поищу такой файл, но документация этой библиотеки пока не так богата - попробую их форум. Спасибо за все комментарии.   -  person zniwalla    schedule 22.01.2018


Ответы (1)


Это связано с транспиляцией, используемой в среде тестирования TestCafe (как заявил @Bergi). Направлю вопрос в другое место. Спасибо за комментарии.

ОБНОВЛЕНИЕ

В настоящее время это ошибка в среде TestCafe (link to bug< /а>). Обходной путь выглядит следующим образом:

async method () {
    return await SuperClass.prototype.method.call(this)
}
person zniwalla    schedule 22.01.2018