微信搜索【GreatMovetotheWorld】,第一时间为大家分享前端行业动态、学习路径等。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。这篇文章应该早在两年前就写好了,因为是某知名Udxxx网课面试的面试题,现在只能凭着弱记回忆了。想说进阶题是因为一开始我以为自己看懂了Promise,但是遇到这种应用题还是被KO了。接触过Promise的人可能觉得没什么难的,就是处理异步async。varp=num=>newPromise((resolve,reject)=>{if(num<=2){setTimeout(resolve('Success!'),Math.random()*1000);return;}reject('失败!')});p(1).then(res=>{console.log(res)}).catch(error=>{console.log(error)});//“成功!”但除了比较常见的fetchAPI,其实还有很多高级的应用!下一道题是要考大家对Promise的熟悉程度,因为一开始真的不知道怎么解...来看题吧。一共有10个任务。一个调用最多可以调用3个,并且完成每个任务所需的时间都不同。请使用下面提供的模板,编写完成这10项任务的方法。/***@return{promise}*编写一个函数来执行任务*/functiontask(){}classhandleTask{constructor(maxCount){this.maxCount=maxCount;this.pendingTask=[];this.completed=0;}run(tasks){}}根据标题和提供的函数推断可能需要哪些变量:totalTask??:number=10→totalnumberoftasksmaxTask:number=3→maximumnumberoftaskpendingTask:[number]=[promise,promise...]→waitingtobeexecutedtaskcompleted:number→TrackhassuccessedseveralTasks写一个promise任务还算简单,/***@return{promise}*写一个函数来执行任务*/functiontask(){returnnewPromise((resolve,reject)=>{console.log('running')setTimeout(resolve(),Math.random()*1000)//每个任务需要的时间不同,所以这里使用random}).then(()=>{console.log('done')}).catch(()=>{console.log('error')})}但是写run()方法我完全卡住:不知道怎么一次执行3次,是跑3个任务吗?那么如何执行其他任务直到执行完成呢?伯爵总觉得会,但不知道怎么解决。其实需要一个很重要的东西count来计算你当前正在执行的任务数→计算当前正在执行的任务Task,如果count<3,task()就会被执行,所以3个Task会先执行。当其中一个任务做完后,计数会-1,然后继续做下一个任务run(tasks){if(this.count
