При использовании ECMAScript 6 и классов можно ли вызвать метод суперкласса из метода расширенного класса после завершения асинхронного вызова?JavaScript ES6 Call to «super» После асинхронного вызова
Здесь не является абстрактным вопросом в коде:
class Foo {
constructor() {
}
myMethod (data) {
console.log('Data was: ', data);
}
}
class Bar extends Foo {
constructor() {
super();
}
myMethod() {
database.getDataForId('wth4308g40giemwfo', function (err, data) {
super.myMethod(data);
});
}
}
Используя выше классу Foo.myMethod() приведет к ошибке, потому что супер больше не относится к суперклассу Foo и не определен внутри Перезвони.
Я пытался сохранить ссылку на супер до обратного вызова и использовать эту ссылку в функции обратного вызова после его завершения, но это не похоже на работу например .:
myMethod() {
var mySuper = super;
database.getDataForId('wth4308g40giemwfo', function (err, data) {
mySuper.myMethod(data);
});
}
Возможно ли это?
Просто говоря: синхронный метод не должен быть перезаписан асинхронным. И вы почти всегда должны делать обратный вызов или возвращать обещание. – Bergi
@Bergi True true (upvoted). Это был просто надуманный пример, чтобы показать конкретный сценарий, а не лучшую практику. –