如何通过JavaScript的Promise限制并发执行的网络请求数量?

更新于
2026-09-26 12:59:13
1阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计477个文字,预计阅读时间需要2分钟。

如何通过JavaScript的Promise限制并发执行的网络请求数量?

一、场景设定+假设存在这样一种场景:现有+30个异常请求需要发送,但受某些因素限制,我们须将同一时刻的请求数量控制在5个以内,同时还要尽可能快速地获取响应结果。

一、场景

假设现在有这么一种场景:现有 30 个异步请求需要发送,但由于某些原因,我们必须将同一时刻并发请求数量控制在 5 个以内,同时还要尽可能快速的拿到响应结果。

如图所示:

上图这样的排队和并发请求的场景基本类似,窗口只有三个,人超过三个之后,后面的人只能排队了。

二、串行和并行

  • 串行:一个异步请求完了之后在进行下一个请求
  • 并行:多个异步请求同时进行

串行举例:

var p = function () { return new Promise(function (resolve, reject) { setTimeout(() => { console.log("1000"); resolve(); }, 1000); }); }; var p1 = function () { return new Promise(function (resolve, reject) { setTimeout(() => { console.log("2000"); resolve(); }, 2000); }); }; var p2 = function () { return new Promise(function (resolve, reject) { setTimeout(() => { console.log("3000"); resolve(); }, 3000); }); }; p() .then(() => { return p1(); }) .then(() => { return p2(); }) .then(() => { console.log("end"); });

如示例,串行会从上到下依次执行对应接口请求。

并行举例:

通常,我们在需要保证代码在多个异步处理之后执行,会用到:

Promise.all((promises: [])).then((fun: function));

Promise.all可以保证,promises数组中所有promise对象都达到resolve状态,才执行then回调。

var promises = function () { return [1000, 2000, 3000].map((current) => { return new Promise(function (resolve, reject) { setTimeout(() => { console.log(current); }, current); }); }); }; Promise.all(promises()).then(() => { console.log("end"); });

这时候考虑一个场景:

如果你的promises数组中每个对象都是www.jb51.net/article/211898.htm

2、www.jb51.net/article/212277.htm

如何通过JavaScript的Promise限制并发执行的网络请求数量?

本文共计477个文字,预计阅读时间需要2分钟。

如何通过JavaScript的Promise限制并发执行的网络请求数量?

一、场景设定+假设存在这样一种场景:现有+30个异常请求需要发送,但受某些因素限制,我们须将同一时刻的请求数量控制在5个以内,同时还要尽可能快速地获取响应结果。

一、场景

假设现在有这么一种场景:现有 30 个异步请求需要发送,但由于某些原因,我们必须将同一时刻并发请求数量控制在 5 个以内,同时还要尽可能快速的拿到响应结果。

如图所示:

上图这样的排队和并发请求的场景基本类似,窗口只有三个,人超过三个之后,后面的人只能排队了。

二、串行和并行

  • 串行:一个异步请求完了之后在进行下一个请求
  • 并行:多个异步请求同时进行

串行举例:

var p = function () { return new Promise(function (resolve, reject) { setTimeout(() => { console.log("1000"); resolve(); }, 1000); }); }; var p1 = function () { return new Promise(function (resolve, reject) { setTimeout(() => { console.log("2000"); resolve(); }, 2000); }); }; var p2 = function () { return new Promise(function (resolve, reject) { setTimeout(() => { console.log("3000"); resolve(); }, 3000); }); }; p() .then(() => { return p1(); }) .then(() => { return p2(); }) .then(() => { console.log("end"); });

如示例,串行会从上到下依次执行对应接口请求。

并行举例:

通常,我们在需要保证代码在多个异步处理之后执行,会用到:

Promise.all((promises: [])).then((fun: function));

Promise.all可以保证,promises数组中所有promise对象都达到resolve状态,才执行then回调。

var promises = function () { return [1000, 2000, 3000].map((current) => { return new Promise(function (resolve, reject) { setTimeout(() => { console.log(current); }, current); }); }); }; Promise.all(promises()).then(() => { console.log("end"); });

这时候考虑一个场景:

如果你的promises数组中每个对象都是www.jb51.net/article/211898.htm

2、www.jb51.net/article/212277.htm

如何通过JavaScript的Promise限制并发执行的网络请求数量?