javascript - 在事件处理程序中异步执行函数是否有意义?
问题描述
假设有一个函数正在做一些复杂/长时间运行的事情:
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;
};
(这个函数实际上只是value
作为参数传递的返回)
现在想象一下,一旦您在输入字段中输入内容,您就想调用此函数:
const MyComponentSync = () => {
const handleChange = e => {
const complexValue = somethingMoreComplexSync(e.target.value);
console.log(complexValue);
};
return (
<label>
Sync
<input onChange={handleChange} />
</label>
);
};
所以每次键入一个字符onChange
都会被触发,因此somethingMoreComplexSync
也会被触发。
这里的问题是:somethingMoreComplexSync
进行异步是否有意义?
据我所知,事件无论如何都被称为异步?(这是真的?)
请参阅此代码框,其中还包含上述的异步实现。
解决方案
在事件处理程序中异步执行函数是否有意义?
在事件处理程序中没有理由使代码异步。
假设有一个函数正在做一些复杂/长时间运行的事情
然后将它正在做的工作分配给 Web Worker 或类似的东西以减轻主事件循环的负载可能是明智的……因为它运行时间很长,而不是因为它与事件有任何关系。
请参阅此代码框,其中还包含上述的异步实现。
没有什么异步的。它包含在 Promise 中(这是管理异步代码的工具),但它仍然是阻塞的。
推荐阅读
- android - 在 Swift 和 Kotlin 中当 Internet 连接离线时发送 HTTP 请求
- php - 如何在另一个页面上显示输入字段的数据
- javascript - HTML 表格样式特定列
- ios - 你如何比较日期类型的 2 个操作数?在 Swift 中对数组进行排序?
- asp.net-core - 部署时如何自动从“../ReportApi”更改它?
- python - 如何将步骤/传递的附加编码添加到快速排序代码中
- kubernetes - helm install 包的传输错误
- c# - **SignalR** SQLDependency Onchanged 多次触发
- c# - GridView / AdaptiveGridView 内的垂直滚动
- laravel - 如何在 laravel 5.8..15 中重定向到管理员登录页面而不是未经身份验证的管理员的登录页面?