首页 > web前端 > js教程 > 正文

JavaScript并发编程:如何正确获取所有异步请求的结果?

聖光之護
发布: 2025-03-06 08:26:10
原创
560人浏览过

javascript并发编程:如何正确获取所有异步请求的结果?

JavaScript并发控制与异步结果完整获取

本文探讨如何在JavaScript并发程序中,确保所有异步请求的结果都能被正确获取。 许多开发者在使用并发控制时,会遇到for循环只能获取部分异步结果的问题,这是因为异步操作的特性与循环执行顺序不匹配。

原始代码通常使用一个createPool函数实现并发限制,但其内部的Promise resolve和reject函数在循环中被重复利用。 当循环快速执行完毕后,大量异步任务等待执行,但它们共享相同的resolve和reject,导致只有少数异步任务的结果能被捕获。

改进后的方法的核心在于使用Map对象promiseMap来分别存储每个任务对应的Promise的resolve和reject函数。 promiseMap以任务ID作为键,存储对应的resolve/reject函数,确保每个异步任务都能找到其专属的resolve函数来返回结果。

立即学习Java免费学习笔记(深入)”;

以下是改进后的createPool函数:

const createPool = (task, { concurrency } = {}) => {
  let runningCount = 0;
  const pool = [];
  const promiseMap = new Map();

  return function (i) {
    return new Promise((resolve, reject) => {
      promiseMap.set(i, { resolve, reject });
      pool.push(() => task(i));

      function run() {
        while (pool.length && runningCount < concurrency) {
          const task = pool.shift();
          runningCount++;
          task()
            .then((val) => {
              const { resolve } = promiseMap.get(val);
              resolve(val);
            })
            .catch((e) => reject(e))
            .finally(() => {
              runningCount--;
              run();
            });
        }
      }
      run();
    });
  };
};
登录后复制

通过promiseMap,每个异步任务都能正确地将结果传递给对应的resolve函数,从而在循环中完整获取所有任务的结果,解决了原始代码中只能获取部分结果的问题。

以上就是JavaScript并发编程:如何正确获取所有异步请求的结果?的详细内容,更多请关注php中文网其它相关文章!

豆包AI编程
豆包AI编程

智能代码生成与优化,高效提升开发速度与质量!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号