当前位置: 首页 > news >正文

如何做网站不被坑辽宁建设工程信息网app

如何做网站不被坑,辽宁建设工程信息网app,wordpress那个版本好用,做一个网上商城网站建设费用多少请求并发数量控制 并发限制 要求#xff1a;多个请求做并发限制#xff0c;请求完成后执行回调 思路#xff1a; 首次循环启动能够执行的任务 取出能执行的任务推入执行器执行 执行器更新当前并发数#xff0c;并且再请求完成时继续取出任务推入执行器 当所有请求完…请求并发数量控制 并发限制 要求多个请求做并发限制请求完成后执行回调 思路 首次循环启动能够执行的任务 取出能执行的任务推入执行器执行 执行器更新当前并发数并且再请求完成时继续取出任务推入执行器 当所有请求完成时触发回调函数 function sendRequest(requestList, limits, callback) {const promises requestList.slice(); // 取得请求list浅拷贝一份// 得到开始时能执行的并发数const concurrentNum Math.min(limits, requestList.length);let concurrentCount 0; // 当前并发数// 第一次先跑起可以并发的任务const runTaskNeeded () {let i 0;// 启动当前能执行的任务while (i concurrentNum) {i;runTask();}};// 取出任务并且执行任务const runTask () {const task promises.shift();task runner(task);};// 执行器// 执行任务同时更新当前并发数const runner async (task) {try {concurrentCount;const res await task();console.log(res);} catch (error) {console.log(error);} finally {// 并发数--concurrentCount--;// 添加下一个任务picker();}};// 添加下一个任务const picker () {// 任务队列里还有任务并且此时还有剩余并发数的时候 执行if (concurrentCount limits promises.length 0) {// 继续执行任务runTask();// 队列为空的时候并且请求池清空了就可以执行最后的回调函数了} else if (promises.length 0 concurrentCount 0) {// 执行结束callback callback();}};// 入口执行runTaskNeeded();}测试一下上面的代码 function axios(url) {return new Promise((resolve, reject) {setTimeout(() {if (Math.random() 0.6) {resolve(成功);} else {reject(失败);}}, Math.random() * 2000);});}const maxReqNum 3,requestList [];for (let k 0; k 15; k) {requestList.push(axios);}sendRequest(requestList, maxReqNum, function () {console.log(所有请求完成);});按照请求顺序返回结果 要求多个请求做并发限制并且所有请求完成时按照请求顺序返回结果 思路 并发限制发送请求需要发送的请求数量如果不够就一次完成了所有请求 每次完成一个请求就产生了一个空位可以继续发送新的请求通过索引来保证顺序 所有请求完成后加了一个变量统计请求完成请求数量并在finally中修改按照请求发送的顺序返回所有请求的结果 function requestLimit(urls, limit) {return new Promise((resolve) {let index 0; // 每次请求的索引// 存放所有请求的返回结果const resultList [];if (urls.length 0) return;const limit Math.min(maxReqNum, urls.length); // 第一次发送多少个请求for (let i 0; i limit; i) {request();}let finishedCount 0; // 请求完成的数量// 发送请求function request() {const i index; // i用来保证请求的顺序与相应顺序能对应上const url urls[index];console.log(url);index; // 每次发送一次请求加1保证请求一个接一个axios(url).then((res) {resultList[i] res i;}).catch((err) {resultList[i] err i;}).finally(() {finishedCount;if (finishedCount urls.length) {resolve(resultList); // 所有请求完成修改promise状态}if (index urls.length) {request(); // 没发送完一个请求只要还有请求没有完成就继续发请求}});}});}// 模仿接口请求function axios(url) {return new Promise((resolve, reject) {setTimeout(() {if (Math.random() 0.6) {resolve(成功);} else {reject(失败);}}, Math.random() * 5000);});}// 测试一下maxReqNum最大并发数urls所有需要发送的请求const maxReqNum 3,urls [];for (let k 0; k 15; k) {urls.push(https:www.test.com/${k});}requestLimit(urls, maxReqNum).then((res) {console.log(res);}).catch((err) {console.log(err);});请求失败继续重新请求及重复请求次数限制 要求多个请求做并发限制当请求失败时继续发送这个请求直到请求成功或者达到了同一个请求重复请求次数的限制请求算完成所有请求完成时按照请求顺序返回结果 思路 在2的基础上添加了一个failUrl来判断是不是继续重复请求失败的那个如果重复的请求就不会往正在请求的任务中添加新的任务保证并发的限制请求失败的时候需要判断请求失败的次数通过往请求的信息中添加了一个index保证请求失败时拿到正确的对应重复请求信息和count保证重复的请求达到限制就不再发送 // 发送请求的方法function request(url) {return new Promise((resolve, reject) {setTimeout(() {if (Math.random() 0.6) {resolve(成功);} else {reject(失败);}}, Math.random() * 2000);});}function requestLimitFunc(maxReqNum, urlList, sameLimit) {return new Promise((resolve) { let index 0; // 通过索引从urlList取出请求const resultList []; // 保留请求结果的数组// 最多可以发多少个请求const limit Math.min(maxReqNum, urlList.length);let finishCount 0; // 有多少个请求已完成function activeTask(params) {for (let i 0; i limit; i) {excuteTask();}}function excuteTask(failUrl) {let reqUrl ;let i 0;if (!failUrl) { i index; // 如果传了failUrl重新请求失败的那个不需要往任务中添加请求了reqUrl urlList[index].url;index;} else { i failUrl.reqIndex;reqUrl failUrl.url;}request(reqUrl).then((res) {finishCount;resultList[i] res;console.log(urlList[i].url, res);// 一个请求完成需要添加新的请求进来if (index urlList.length) excuteTask();}).catch((err) {// 请求失败需要重新发送请求直到请求成功或达到最多发送次数if (sameLimit urlList[i].count) {finishCount;resultList[i] err;console.log(失败了, urlList[i].url);if (index urlList.length) excuteTask();} else {urlList[i].count;excuteTask(urlList[i]);}}).finally(() {if (finishCount urlList.length) resolve(resultList);});}activeTask(); // 第一次启动在并发限制内发送最多的请求});}// 等待请求的数组const urlList [];for (let i 0; i 15; i) {urlList.push({reqIndex: i,count: 1,url: https:www.test.com/${i},});}const maxReqNum 5; // 最大并发数const sameLimit 3; // 同一个请求失败重新请求最多请求3次requestLimitFunc(maxReqNum, urlList, sameLimit).then((res) {console.log(res);});
http://www.hkea.cn/news/14368481/

相关文章:

  • 保定网站制作企业给公司做网站需要多少钱
  • 宝应县建设工程管理局网站绍兴市交通建设有限公司网站
  • 仿站能被百度收录吗网站YYQQ建设
  • 沈阳网站建设培训班帮别人起名 做ppt的网站
  • 网站建设企业如何为公司建设wordpress 教育模版
  • wordpress 批量修改文章分类辽宁好的百度seo公司
  • 崇仁网站建设推广费用crm客户管理系统简历
  • h5制作的网站网站建设与管理总结
  • 图片分享网站源码京东商城官网入口
  • 网站搭建官网wordpress添加wow
  • 广东省交通建设监理检测协会网站小白怎么做网站赚钱
  • 网站设计的英文运城购物网站开发设计
  • 网站建设的岗位叫什么推广企业网站最主要的方式
  • 网站建设策划实训总结网站开发 税率
  • 焊接加工订单网seo咨询顾问
  • 辽宁省营商环境建设局网站备案时网站名称
  • 成交型网站建设方案做会员卡网站
  • 怎么样自己制作网站百度地图在线导航查询
  • 旅游网站开发近五年参考文献wordpress端口更改
  • 沈阳城市建设学院官网网站中山做营销型网站
  • 响应试网站和移动端如何推广一个平台
  • 手机网站字体大小规范做网站如何被收录
  • 重新安wordpress网站分毫报价小程序
  • 网站推广 方法psd企业网站模板
  • 建设网站软件帝国和织梦哪个做网站好
  • 邢台中北世纪城网站兼职WordPress mk主题
  • 网站前端开发培训西安珠海溢动网络科技有限公司
  • 北海市住房和城乡建设局网站成都较出名的广告公司
  • 属于网站的管理 更新 维护怎么自己公司名下的网站
  • 电商网站开发文献综述莱芜最新钟点工招聘