【问题标题】:Callback inside of method in an ES6 class calling another method调用另一个方法的 ES6 类中的方法内部回调
【发布时间】:2017-11-20 21:50:50
【问题描述】:

我正在尝试执行以下操作。

  listening(randomToken, self) {
    console.log("test");
  }

  startListening(randomToken) {
    let test = caller => {
      this.listening(randomToken, this);
    };

    this.udpSocket.on("listening", test);
  }

我从另一个类调用 startListening,但输出的是 console.log("test");永远不会显示在 Chrome 控制台中。

但是,当我这样做时:

  startListening(randomToken) {
    let test = caller => {
      this.listening(randomToken, this);
    };

    this.udpSocket.on("listening", this.listening(randomToken));
  }

输出显示正确,但是我明白了:

未捕获的类型错误:“listener”参数必须是函数

为什么会这样?当然,我可以通过将它包裹在 try/catch 周围来避免显示错误,但是有没有更合适的方法来处理这个问题?

编辑:我忘了说即使这样也行不通:

    let test = caller => {
      console.log("test");
    };

    this.udpSocket.on("listening", test);
  }

【问题讨论】:

  • 所以看起来updSocket.on 从未调用回调?它从何而来?你确定它触发了listening 事件吗?
  • 嘿!感谢您的回复,我实例化了一个名为 ClientController 的类,然后从一个 React 组件(我在电子应用程序中使用)中,我在 onClick 事件上触发了 clientController.startListening() 方法。

标签: javascript class ecmascript-6 closures electron


【解决方案1】:

您应该将“测试”作为函数传递,

this.udpSocket.on("listening", test());

【讨论】:

  • 每当我这样做时,我都会收到与我发布的第二个 sn-p 相同的错误,即: Uncaught TypeError: "listener" argument must be a function
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
相关资源
最近更新 更多