javascript - 在事件处理程序中异步执行函数是否有意义?

标签 javascript reactjs asynchronous

假设有一个函数正在执行一些复杂/长时间运行的操作:

const somethingMoreComplexSync = value => {
  let stupidString = value;
  for (let i = 0; i < 100000000; i++) {
    stupidString = i % 2 === 0 ? stupidString + "1" : stupidString.slice(0, -1);
  }
  return stupidString;
};

(这个函数实际上只是返回作为参数传递的)

现在假设您在输入字段中键入内容后想要调用此函数:

const MyComponentSync = () => {
  const handleChange = e => {
    const complexValue = somethingMoreComplexSync(e.target.value);
    console.log(complexValue);
  };

  return (
    <label>
      Sync
      <input onChange={handleChange} />
    </label>
  );
};

因此,每次输入字符时,都会触发onChange,从而触发somethingMoreComplexSync

这里的问题是:使 somethingMoreComplexSync 异步有意义吗?

据我所知,事件无论如何都被称为异步? (这是真的吗?)

查看此codesandbox其中还包含上述内容的异步实现。

最佳答案

Does it make sense to execute functions in event handlers async?

处于事件处理程序中并不是使代码异步的理由。

Let's say there is a function which is doing some complex/long running stuff

然后,将正在执行的工作分配给 Web Worker 或类似的工作以减轻主事件循环的负载可能是明智的……因为它长时间运行,而不是因为它与事件有任何关系。

See this codesandbox which also contains an async implementation of the above.

这与异步无关。它被封装在 Promise(这是管理异步代码的工具)中,但它仍然是阻塞的。

关于javascript - 在事件处理程序中异步执行函数是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60092917/

相关文章:

javascript - JSON 数组 Restful 到 textarea

javascript - 带有 polymer + 元素的 SystemJS

javascript - 在 {} 对象创建中引用其他属性

javascript - 如何使用链接打开 Bootstrap 选项卡?

javascript - 为什么在移动设备上点击按钮时按钮周围有一个黑色区域

javascript - 在 React 中卸载组件时监听器不会被删除

javascript - 如何用 jest --watch 运行回调

java - Android/Java异步图片下载任务不停运行

node.js - 如何在node.js中设置超时?

javascript - React onLoad img 事件未按预期工作