【问题标题】:Can't pass callback function to SocketIO in typescript无法在打字稿中将回调函数传递给 SocketIO
【发布时间】:2021-08-15 00:47:30
【问题描述】:

堆栈: Node.js + Express + TypeScript + Socket.io
问题: 我无法使用 TypeScript 传输库中提供的回调 如何正确调用回调?下面的代码会抛出错误。

socket.on('method', async (params: any, callback: (res: any) => void) => {
  // endpoint's logic
  const result = await this._service.ServiceMethodAsync(params);

  // acknowledgement
  callback(result);
})

错误

TypeError:回调不是函数

【问题讨论】:

  • 你能在你发出method事件的地方添加你的实现吗?
  • 无需在此处编辑问题,您的评论实际上让我考虑检查客户端代码,结果发现上面提到的 sn-p 很好,并且发出方法存在问题。谢谢。
  • 但是,请提供问题的实现和原因,然后发布答案,以便有相同问题的开发人员可以看到您的答案

标签: node.js typescript socket.io


【解决方案1】:

如果您要对在套接字上触发的事件执行验证,那么我会说按照他们的页面 here 上提供的示例进行操作。

如果您在上面提供的情况下,您将:

socket.on('method', async (params, callback) => {
  if (typeof callback !== "function") {
    // event is not an acknowledgement, do something i.e. return
    return;
  }

  const result = await this._service.ServiceMethodAsync(params);

  // acknowledgement
  callback(result);
})

这是另一个了解 SocketIO 中的 Acknowledgements 的资源。

【讨论】:

    【解决方案2】:

    检查客户端代码,发现上面提到的 sn-p 很好,发出方法时出现问题。
    固定客户端:

    socket.emit('method', msg, (res) => {
      console.log(res);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-09
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2021-11-27
      • 2019-08-21
      • 2021-03-22
      相关资源
      最近更新 更多