首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止慢异步函数阻塞他人?

如何防止慢异步函数阻塞他人?
EN

Stack Overflow用户
提问于 2022-03-06 22:40:42
回答 1查看 238关注 0票数 0

我有一个后台函数,它解析了大量文件数组中的数据。消耗单个文件的时间可能很长,所以我的函数有时可以将JS引擎捆绑2-3秒。

代码语言:javascript
复制
for (let x = 0; x <= dataView.byteLength - 1; x++) strView += String.fromCharCode(dataView.getUint8(x))

我并不需要更快的运行,这是一个低优先级的后台过程。我需要的是这个函数(它是一个通过void调用的异步函数,而不是等待)在处理单个文件时一次不阻塞其他函数2-3秒。

是否有一种方法可以修改这个for循环,以便有效地授予JS事件循环权限,以便在上面的"for“循环中执行其他任务?我试着在循环中经常等待一个简短的承诺,但这似乎并没有屈服。我想要做的事情(防止后台进程阻塞更高的优先级)是否真的只能通过像Web工作人员那样真正的多线程/任务来完成?

EN

回答 1

Stack Overflow用户

发布于 2022-03-07 03:37:28

v2.0

代码语言:javascript
复制
function sleep(fff) {
  return new Promise(rs => setTimeout(rs, fff));
}

async function slow(count, callback, threshold = 10000) {
  var i = 0;
  while (i < count) {
    callback(i++);
    if (i % threshold === 0) {
      await sleep(1);
    }
  }
}

var strView = '';
slow(dataView.byteLength, x => strView += String.fromCharCode(dataView.getUint8(x))).then(() => {
  console.log(strView);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71374781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档