【发布时间】:2020-12-17 15:06:15
【问题描述】:
我有一个电子应用程序,我需要通过 UDP 发送大量数据。这个过程是通过点击我的 React UI 中的一个按钮开始的,这个例子简化了我的问题。我的反应按钮:
<button
onClick={() => {
foo();
}}
>
Run foo
</button>;
Foo函数:
export const foo = async () => {
while (true) {
console.log("hello");
}
};
虽然 foo 是异步的,但它仍然会冻结 React UI!
【问题讨论】:
-
JavaScript 在单线程中运行。即使函数是异步的,如果你让它运行一个无限的while循环,它仍然会阻塞应用程序。
-
异步函数只是一个返回承诺的函数。它没有说明您在函数中或在 Promise 中所做的事情是异步的。你写了一个自旋循环,不管它在哪里运行都会阻塞线程。
-
async function(或一般的承诺)不会让事情在不同的线程中运行。为此,您需要使用工作人员。 -
是的@Bergi,我一直在考虑使用工人,因为这可以让我创建一个新线程,这将是我使用任何其他语言的解决方案。 Nodejs 工作人员让我感到困惑......并不是说整个 nodejs 不会让我感到困惑
-
您能否分享更多关于“我需要通过 UDP 发送大量数据”的详细信息(可能还有代码)?通常,解决方案不是在同步
while(true)循环中执行此操作,而是将它们分批成块,以延迟散布它们,和/或使用异步操作系统功能等待网络缓冲区实际发送数据包.
标签: javascript node.js reactjs asynchronous electron