我试图从我从类构造函数调用的函数的回调中设置类成员变量。

更具体一点:我需要基于Redis INCR结果在Connection类构造函数中设置连接ID(每个客户端都有一个“全局”连接ID,因此我可以有多个节点)。

这是代码。

class Connection {
  constructor() {
    client.incr('conn_id', (err, reply) => {
      this.connID = reply;
    });
  }
}

var lovely = new Connection();
console.log(`lovely connID is ${ lovely.connID }`);

结果是:lovely connID is undefined

最佳答案

似乎client.incr('conn_id'....)是异步的,这意味着在您的代码运行后将调用回调。

所以

console.log(lovely connID is ${ lovely.connID });将在回调之前被调用



这类似于:

class Connection{
  constructor(){
    self=this;
    setTimeout( function(){self.client='somevalue';
                          console.log('value1');}, 10)

  }
}

var a = new Connection();

console.log(a.client);

运行此将导致

关于javascript - 无法通过回调设置类成员变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38018167/

10-09 09:55