当我尝试调用扩展函数时,我的'super'关键字出现意外。
handleLogin(data, client) {
logger.write('Login initiated');
var xml = libxmljs.parseXml(data);
var nick = (xml.get('//nick')).text();
var pass = (xml.get('//pword')).text();
super.database.getPlayer(nick, function(err, player) {
if(player) {
super.database.updateColumn(player.id, 'loginKey', loginKey);
}
});
}
此行发生错误:
super.database.updateColumn(player.id, 'loginKey', loginKey);
我似乎无法理解为什么。
答案 0 :(得分:1)
您可以使用箭头函数作为回调来保留特定于上下文的关键字super
的范围:
const wait = (ms) => new Promise(resolve => {
setTimeout(resolve, ms)
})
// dumb example
class SlowArray extends Array {
push (value) {
return wait(Math.random() * 100 + 100)
.then(() => {
// arrow function with super
return super.push(value)
})
}
}
var array = new SlowArray()
array.push(5).then(length => {
console.log('done:', length, `[${array}]`)
})
console.log('waiting...', length, `[${array}]`)

所以在你的例子中,那将是:
super.database.getPlayer(nick, (err, player) => {
if (player) {
super.database.updateColumn(player.id, 'loginKey', loginKey);
}
});