'super'关键字在这里出乎意料

时间:2017-10-10 23:16:42

标签: javascript node.js

当我尝试调用扩展函数时,我的'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);

我似乎无法理解为什么。

1 个答案:

答案 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);
    }
});
相关问题