我正在处理以下情况。
我必须使用类中的方法,但我也要调用回调...
看一下代码,我创建了_this
var因为我不知道如何从匿名函数中访问DeviceAnalyzer
实例...
还有其他方法吗?我觉得我这样做的方式有点讨厌哈哈
DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback) {
var _this = this;
netutils.ping(host.ipAddress, function(isAlive) {
deviceInfo.isAlive = isAlive
_this.emit('device', deviceInfo);
callback(null, deviceInfo);
});
};
答案 0 :(得分:3)
使用ES6和匿名函数,您不必设置或绑定它。
DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback) {
netutils.ping(host.ipAddress, (isAlive) => {
deviceInfo.isAlive = isAlive
this.emit('device', deviceInfo);
callback(null, deviceInfo);
});
};
答案 1 :(得分:1)
DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback) {
(function (that) {
return netutils.ping(host.ipAddress, function(isAlive) {
deviceInfo.isAlive = isAlive
that.emit('device', deviceInfo);
callback(null, deviceInfo);
}))(this);
};
答案 2 :(得分:1)
上述方法很好。
另一种方法是使用bind
DeviceAnalyzer.prototype.pingProcess = function(deviceInfo, callback) {
netutils.ping(host.ipAddress, function(isAlive) {
deviceInfo.isAlive = isAlive
this.emit('device', deviceInfo);
callback(null, deviceInfo);
}.bind(this));
};