【问题标题】:Node js Eventemitter not fireingNode js Eventemitter没有触发
【发布时间】:2021-05-29 19:28:43
【问题描述】:

我有一个问题,我的 Eventemitter 没有触发。我已经用谷歌搜索了这个问题,看起来我的代码顺序是错误的..或者至少这是我的猜测。无论如何,无论我如何放置创建 client.js 类的顺序,它都不会触发。

仅供参考,创建一个通过 TCP/IP 与服务器通信的电子应用程序。当客户端连接状态发生变化时,应该触发“连接”事件来告诉前端发生变化。 “错误”等其他事件正在运行。

我不知道这是否足够你的代码,如果你需要更多,请告诉我。

client.js

class Client extends events.EventEmitter {
  constructor(HOST, PORT){
    // setting up the client..
    super();
    this.host = HOST;
    this.port = PORT;
    // and so on...
    this.client = new net.Socket();
    // othere eventlisteres...
    this.client.on("connect", this.connectEventHandler);
  }
  connectEventHandler() {
    try {
      this.status = "connected"; // I can check the status from main
      this.tryReconnecting = false; // other logic of the client class
      this.emit("connection"); // this is the event (not working)
      console.log("connection status should be triggered"); // this console.log is working
    } catch (error) {
      console.log(error);
      this.emit("error", error);
    }
  }
}

main.js

// creating the client
const client = new Client(process.env.SERVER, process.env.PORT);

// when the app is ready, client is told to connect to the server
app.whenReady().then(() => {
  createWindow();
  app.on("activate", function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
  client.connect();
});

// the error event is working perfectly, event when I call it in the connectEventHandler
client.on("error", (message) => {
  console.log("error event triggered");
  dialog.showMessageBoxSync(mainWindow, {
    title: "Fehler",
    message: message,
  });
});

// this part is not working
client.on("connection", () => {
  console.log("new client status: " + client.status);
  mainWindow.webContents.send("client-status", client.status);
});

即使我调用错误事件而不是连接事件,错误也会显示在我的应用程序中:

// code from client.js
connectEventHandler() {
  try {
    this.status = "connected"; // I can check the status from main
    this.tryReconnecting = false; // other logic of the client class

    // this part is getting ignored
    this.emit("connection");

    // this part is executed
    this.emit("error", "this is a test error");

  } catch (error) {
    console.log(error);
    this.emit("error", error);
  }
}

最后一段代码的响应(connectEventHandler):

这是怎么回事?

谢谢!

【问题讨论】:

    标签: javascript node.js sockets electron event-handling


    【解决方案1】:

    问题出在ConnectEventHandler,把这个函数的逻辑放到客户端的构造函数中后,每个事件都被正确触发了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2023-01-23
      • 2015-10-19
      相关资源
      最近更新 更多