【问题标题】:How to wait for socket.on in nodejs如何在nodejs中等待socket.on
【发布时间】:2017-11-13 20:43:30
【问题描述】:

我想知道如何等待 socket.on 调用。我知道可以使用here 描述的回调,但这不适用于我的情况(至少我认为不是)。以下是我所拥有的:

index.html

...
socket.on('update_img', function(data) {
    // Do something
});

scanner.addListener('scan', function(content) {
    socket.emit('answer', content);
});

然后在服务器上:

...
client.emit('update_img', some_data);
...
client.on('answer', function(data) {
    // do something with the answer
});

基本上发生了什么,我将一些东西发送到前端,然后生成图像。同时,浏览器中的库(instascan,即scanner.addListener)等待读取二维码并将其内容发送回服务器。所以我现在需要的是client.on('answer', ...); 等待这个答案。

有什么办法可以做到吗?

【问题讨论】:

  • 你试过了吗?您的代码应该可以工作。
  • 当然是的,否则我不会问 ;-)
  • 你能把 console.log() 语句放在每个回调中,看看你能走多远?
  • 您可以生成唯一的事件名称,订阅它,并将名称传递给服务器

标签: javascript node.js socket.io


【解决方案1】:

基本上使用 client.on(...) 您将回调添加到该事件,这意味着每当从客户端发出“anwser”事件时,它将在服务器上调用。

因此,如果您确保客户端上的 socket.emit("anwser") 仅在您从服务器发送图像后调用,则服务器只需要侦听“anwser”事件并可能假设一切正如预期的那样发生。

因此,您实际上不必明确地“等待”。

编辑:误解了您的流程。会更新我的答案

【讨论】:

  • 我需要等待内容才能正确完成请求。
  • 内容是通过“update_img”事件提供的吧?
  • update_image 只是更新屏幕上的图像。扫描仪扫描一个二维码,其中的内容需要处理并作为请求答案发回
  • 我不确定问题出在哪里......你说你需要 client.on("anwser") 来等待 anwser。它通过附加回调自动执行此操作...
  • 当我在 client.on('answer', ...) 之后立即输出日志并且我不发送 socket.emit('answer', ...) 时,日志仍然出现,但不应该出现。
猜你喜欢
  • 2013-11-05
  • 1970-01-01
  • 2018-12-31
  • 2014-07-12
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 2014-12-21
相关资源
最近更新 更多