我有一个传感器类和一个扩展它的类。这两个类的构造函数都使用异步操作。
基类:
/**
* Basic sensor class
*/
class Sensor {
/**
* Constructor function
* @param {object} options - sensor options
* @param {*} callback - fn(err)
*/
constructor(options, callback) {
...
callback(null);
版本A(失败): 扩展类,在super的回调中调用它:
ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor
/**
* Mock of the Chirp water level sensor.
*/
class ChirpSensorMock extends SensorMock {
/**
* Constructor function
* @param {object} options - sensor options
* @param {*} callback - fn(err)
*/
constructor(options, callback) {
super(options, (err) => {
if (err) { return callback(err); }
async.eachSeries(this.detectors,
版本B(可以运行,但出现eslint错误):
Missed superclass's construction invocation
constructor(options, callback) {
async.series([
(next) => super(options, next),
(next) => {
async.eachSeries(this.detectors,
有没有一种方法可以使用回调(并避免使用async/await
来调用super
并在回调中使用this
?还是我应该忽略eslint错误,例如与// eslint-disable-next-line constructor-super
答案 0 :(得分:1)
您可以尝试在Sensor中将此绑定到您的回调,这将是扩展Sensor的任何类的callback(将无法在箭头函数中使用)的this
值
class Sensor {
/**
* Constructor function
* @param {object} options - sensor options
* @param {*} callback - fn(err)
*/
constructor(options, callback) {
...
callback.call(this,null);
}
}
class ExtendSensor extends Sensor{
constructor(){
super(option, function(v){
console.log(v, this) //v == null, this == ExtendSensor{}
});
}
}