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

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  {              const { resolve } = promiseMap.get(val);              resolve(val);            })            .catch((e) => reject(e))            .finally(() => {              runningCount--;              run();            });        }      }      run();    });  };};

登录后复制

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3044681.html

(0)
上一篇 2025年3月13日 15:28:27
下一篇 2025年3月6日 19:54:34

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论