JavaScript ES6在异步调用后调用"超级"

Rob*_*ans 3 javascript class ecmascript-6

使用ECMAScript 6和类时,是否可以在异步调用完成后从扩展类方法调用超类方法?

以下是代码中问题的摘要:

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);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

使用上面的类Foo.myMethod()将导致错误,因为super不再引用Foo的超类,并且在回调中未定义.

我试图在回调之前保留对super的引用,并在回调完成后在回调中使用该引用,但这似乎不起作用,例如:

myMethod () {
    var mySuper = super;

    database.getDataForId('wth4308g40giemwfo', function (err, data) {
        mySuper.myMethod(data);
    });
}
Run Code Online (Sandbox Code Playgroud)

可能吗?

Cod*_*gue 5

箭头函数将保留所有词汇引用,而不仅仅是this,因此您也可以使用它来访问super:

myMethod () {
    database.getDataForId('wth4308g40giemwfo', (err, data) => {
        super.myMethod(data);
    });
}
Run Code Online (Sandbox Code Playgroud)