【问题标题】:Switching between while loops with socket.io and express使用 socket.io 和 express 在 while 循环之间切换
【发布时间】:2022-01-14 16:18:21
【问题描述】:

我的树莓派上有一个运行 socket.io 的快速应用程序,它控制着一个 LED 面板。为了驱动面板,我有一个 while 循环,它不断更新面板中的像素。我希望能够更改该循环的参数或完全切换到不同的循环以控制面板显示的动画。

最好的方法是什么?当我尝试将一条新的 socket.io 消息传递给服务器时,由于它被循环阻塞,所以没有收到该消息。我可以以这种方式开始第一个动画,但任何后续消息都会被阻止。

如果需要,我可以提供代码 sn-ps。

【问题讨论】:

  • 代码会很棒!
  • 欢迎来到 Stack Overflow!
  • 请在您的问题中包含相关代码。关于 stackoverflow 上代码的问题应该包括相关代码。这使人们能够提供更快、更准确和更完整的答案,而无需提出大量问题或提出不适当的解决方案。您可以使用问题下方的“编辑”链接为您的问题添加其他内容。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: javascript node.js express while-loop socket.io


【解决方案1】:

使用一个在最后异步调用自身的函数而不是循环。这允许在下一个函数执行之前处理诸如 socket.io 消息之类的事件。

下面的 HTML 页面说明了这个想法。循环每秒增加一个计数器,通过按下按钮,您可以增加增量。

<!DOCTYPE html><html>
<head>
<script type="text/javascript">
var counter = 0, increment = 1;
function loop() {
  counter += increment;
  document.querySelector("span").textContent = counter;
  setTimeout(loop, 1000);
}
</script>
</head>
<body onload="loop()">
  <span></span>
  <button onclick="increment++">Count faster</button>
</body>
</html>

这里,setTimeout(loop)“足够异步”以允许点击事件,而Promise.resolve().then(loop) 则不会。正如下面的评论所说,需要您的代码来判断它如何为您的事件工作。

【讨论】:

  • 目前尚不清楚这是否与 OP 的问题有关。我们需要看他们的代码才能知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 2021-10-22
相关资源
最近更新 更多