分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

js 多个异步 的并发控制

发布时间:2023-09-06 02:35责任编辑:白小东关键词:js

  今天在群里看到一个人发的面试题:  

1,请实现如下的函数,可以批量请求数据,所有的URL地址在urls参数中,同时可以通过max参数 控制请求的并发度。当所有的请求结束后,需要执行callback回调。发请求的函数可以直接使用fetch。function sendRequest (urls: string[], max: number, callback: () => void) {}

    fetch 函数返回的是一个promise,promise对象在实例化的时候就已经开始执行了。

    

 ???function sendRequest(urls, max, callback) { ???????let allUrls = [...urls], ???????????i = 0, ???????????fetchArr = []; ???????????????function doFetch() { ???????????// 处理边界的情况 ???????????if (i === allUrls.length) { ???????????????return Promise.resolve(); ???????????} ???????????//每次调用出去 一个 url, 放入fetch中 ???????????let one = fetch(allUrls[i++]); ???????????// 将此promise的状态保存在fetchArr中, 执行完之后 从数组中删除。 ???????????let result = one.then(() => fetchArr.splice(fetchArr.indexOf(result), 1)); ???????????result.push(fetchArr); ???????????// 数量不够就重复调用doFetch, 够了的话就比较 ???????????let p = Promise.resolve(); ???????????if (fetchArr.length >= max) { ???????????????p = Promise.race(fetchArr); ???????????} ???????????return p.then(() => doFetch()) ???????} ???????// 最后用all 处理剩余数组中的,等处理完再执行callback ???????return doFetch().then(() => Promise.all(fetchArr)).then(() => { ???????????callback(); ???????}) ???}

  

  

js 多个异步 的并发控制

原文地址:https://www.cnblogs.com/wjyz/p/10541581.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved