全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
12
返回列表 发新帖
楼主: 叼爆小朋友

js如何多线程执行for语句

[复制链接]
发表于 2023-12-15 11:00:14 | 显示全部楼层
js设计的时候就是单线程的,数据量大建议放在后端处理
发表于 2023-12-15 11:07:07 | 显示全部楼层
把你的 for 循环写到一个 Promise 里,然后Promise.all
发表于 2023-12-15 11:29:54 来自手机 | 显示全部楼层
这是什么需求啊,需要这么怪的写法
发表于 2023-12-15 13:43:38 | 显示全部楼层
本帖最后由 yousihai 于 2023-12-15 13:44 编辑
摩卡 发表于 2023-12-15 11:07
把你的 for 循环写到一个 Promise 里,然后Promise.all


写到promise里面它也是单线程的,只是不会阻塞你当前代码的执行,而是放到了当前宏任务之后执行而已,依然是会卡住ui渲染的

也就是说原来是

xxx ->for ->xxx ->ui rendering

现在变成了

xxx -> promise ->xxx -> for -> promise.then -> ui rendering
 楼主| 发表于 2023-12-15 14:35:54 | 显示全部楼层
hentai 发表于 2023-12-15 11:00
js设计的时候就是单线程的,数据量大建议放在后端处理

不能放后端处理,好点的小鸡买不起,用户访问一多我小鸡就要爆炸了,放前端处理更节省小鸡资源
发表于 2023-12-15 14:41:45 | 显示全部楼层
Promise也是单线程的,只不过是异步。
js单文件默认都是单线程,如果想多线程那就把代码扔进独立的一个js脚本,然后用外部js中的Service Worker调用才行。
类似于 new Worker("for.js"); 这样的,具体原理还得楼主自己看看,反正挺麻烦的。
发表于 2023-12-15 20:09:29 | 显示全部楼层
  1. async function processData() {
  2.   const promises = [];
  3.   
  4.   function processTask(condition, statement) {
  5.     return new Promise((resolve, reject) => {
  6.       for (let i = 0; ; i++) {
  7.         if (condition) {
  8.           statement;
  9.           resolve();
  10.           break;
  11.         }
  12.       }
  13.     });
  14.   }
  15.   
  16.   promises.push(processTask(条件1, 语句));
  17.   promises.push(processTask(条件2, 语句));
  18.   promises.push(processTask(条件3, 语句));

  19.   await Promise.all(promises);
  20. }

  21. processData();
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-20 11:37 , Processed in 0.064897 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表