javascript - 无法从回调中设置类成员变量

标签 javascript redis ecmascript-6

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

更具体一点:我需要根据 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 未定义

最佳答案

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

所以

console.log(可爱的connID是${ lovely.connID });会在回调前被调用

(err, reply) => { self.connID = reply; }

与此类似:

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

  }
}

var a = new Connection();

console.log(a.client); 

运行这个会产生

undefined value1

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

相关文章:

javascript - 多个 `setState` 不同步 - 如果使用从 `await` 获取的值

javascript - Google Chart IE9 问题(未定义)

node.js - Nodejs 中的 Redis for 循环无法正常工作

Javascript:附加到键的值,其中该值是一个列表

javascript - 编写一个易于使用的 Typescript 框架

javascript - 如何为 PartialViewResult 返回空字符串(或 null)?

caching - spring boot缓存不支持kotlin?

python - 在redis中查询

javascript - 为什么即使 0 不在范围内,函数的输出也是 0?

javascript - 构造函数和原型(prototype)方法中的 ES6 super()