深圳求职网站哪个好wordpress 蛋花儿收费主题

张小明 2026/1/9 15:40:04
深圳求职网站哪个好,wordpress 蛋花儿收费主题,望野博物馆阎焰简历,泰安焦点网络有限公司前言 Promise一直是前端面试中的热点#xff0c;下面给大家介绍下Promise的相关方法。 1. Promise.all 1.1 介绍 调用Promise.all时需要传入一个promise数组#xff0c;我们称它为promiseArr#xff0c;然后Promise.all会返回一个新的Promise#xff0c;我们把它称为p下面给大家介绍下Promise的相关方法。1. Promise.all1.1 介绍调用Promise.all时需要传入一个promise数组我们称它为promiseArr然后Promise.all会返回一个新的Promise我们把它称为p如果promiseArr中有一个Promise失败则走入p的catch回调中并拿到对应的错误对象。如果promiseArr里面全成功则会走入p的then方法中并能拿到之前传入的promiseArr对应的promise结果。1.2 原理functionpromiseAll(promiseArray){returnnewPromise((resolve,reject){if(!Array.isArray(promiseArray)){returnreject(newError(传入的参数必须是数组))}constpromiseNumpromiseArray.lengthconstresultsnewArray(promiseNum)letcount0promiseArray.forEach((promise,index){Promise.resolve(promise).then(res{results[index]resif(countpromiseNum){resolve(results)}}).catch(reject)})})}注意点需要默认返回一个promise存结果的results数组需要通过index和传入的promise数组一一对应1.3 应用场景并行发送多个请求。多个文件的并行读取。并行执行多个任务。2. Promise.race2.1 介绍race的意思是赛跑哪个Promise跑的快也就是哪个Promise最先成功或失败整个Promise.race也就对应的成功或失败。2.2 原理functionPromiseRace(promiseArray){returnnewPromise((resolve,reject){if(!Array.isArray(promiseArray)){returnreject(newError(传入的参数必须是数组))}promiseArray.forEach((promise,index){Promise.resolve(promise).then(res{resolve(res)}).catch(reject)})})}2.3 应用场景尽快拿到请求结果比如多个接口都可以拿到你想请求的数据你就可以用Promise.race如果拿到了一个请求的响应结果你就可以直接渲染页面了这样能加快我们的页面响应速度。多个资源加载你可以把手动去加载多个资源然后用Promise.race来等待最快加载的资源后采取行动以提高加载性能。竞态条件处理同时尝试多个可能的解决方案并采取第一个可用的解决方案。3. Promise.prototype.finally3.1 介绍finally和then、catch一样都是Promise原型上的方法与then、reject一同不管Promise成功还是失败最终都会执行finally方法。3.2 原理Promise.prototype.finallyfunction(cb){returnthis.then((y){returnPromise.resolve(cb()).then(()y);},(r){returnPromise.resolve(cb()).then((){throwr;});});};3.3 应用场景清理资源或状态比如你需要在最Promise执行结束之后释放一些资源比如打开的文件、数据库连接或网络连接等或者释放状态比如页面的loading等执行收尾操作比如无论Promise成功或者失败你都要执行一些收尾工作比如记录日志、发送统计信息或触发一些事件等。统一处理在then和catch的时候都需要进行的处理这时候你就不需要写两次重复的代码了直接放在finally当中。4. Promise.allSettled4.1 介绍Promise.allSettled()方法接收一组Promise作为参数返回一个新的Promise实例只有等到所有的这些参数实例都返回结果不管是fulfilled还是rejected包装实例才会结束返回新的Promise实例一旦结束状态总是fulfilled不会变成rejected新的promise实例给监听函数传递一个数组results。该数组的每个成员都是一个对象对应传入Promise.allSettled的Promise实例。每个对象都有status属性对应着fulfilled和rejected。fulfilled时对象有value属性rejected时有reason属性对应两种状态的返回值。当我们不需要关心异步操作的结果只会关心这些操作有没有结束的时候这时候Promise.allSettled就派上用场了。4.2 原理constformatSettledResult(isSuccess,value){returnisSuccess?({status:fulfilled,value}):({status:rejected,reason:value})}Promise.all_settledfunction(promises){if(!Array.isArray(promises)){thrownewError(传入的参数必须是数组y)}letnum0,lenpromises.length,resultsArray(len)returnnewPromise((resolve,reject){promises.forEach((promise,index){Promise.resolve(promise).then((value){results[index]formatSettledResult(true,value)if(numlen){resolve(results)}}).catch((reason){results[index]formatSettledResult(false,reason)if(numlen){resolve(results)}})})})}4.3 应用场景并行请求当我们需要并行发送多个请求并在所有请求完成后获得每个请求的结果和状态信息批量处理在等待所有的请求完成后对各个请求的状态分别进行处理。处理多个资源加载可以将资源的加载封装为promise并同时加载多个资源并在加载完后根据promise的状态对每个资源进行对应的处理。5. Promise.cache5.1 介绍利用promise实例化立即执行的特性可以做请求的缓存。5.2 原理constcacheMapnewMap()functionenableCache(target,name,descriptor){constvaldescriptor.value descriptor.valueasyncfunction(...args){constcacheKeynameJSON.stringify(args)if(!cacheMap.get(cacheKey)){constcacheValuePromise.resolve(val.apply(this,args)).catch((){cacheMap.set(cacheKey,null)})cacheMap.set(cacheKey,cacheValue)}returncacheMap.get(cacheKey)}returndescriptor}classPromiseClass{// 装饰器// enableCachestaticasyncgetInfo(){}}PromiseClass.getInfo()PromiseClass.getInfo()PromiseClass.getInfo()这里我先定义一个Map作为缓存对象然后用方法名也就是上面的getInfo参数序列化后的值作为缓存key值然后就可以实现请求的缓存了当然我这里缓存key设置的比较简单实际业务场景肯定会更为严谨一些然后业务中如果用了缓存的话需要考虑缓存失效的问题过快失效和过久不失效都可能会让程序出现bug需要注意一下。5.3 应用场景缓存接口请求结果避免重复请求。也可以用来缓存复杂函数计算结果提高性能。6. Promise.limit6.1 介绍Promise.limit可以通过promise实现并发控制。6.2 原理functionlimitLoad(promiseArray,limit){constresults[];constpromisespromiseArray.slice(0,limit).map((promise,index){returnpromise.then((value){results[index]value;returnindex;})})letpPromise.race(promises)for(letilimit;ipromiseArray.length;i){pp.then((index){promises[index]promiseArray[i].then((value){results[i]value;returnvalue})returnPromise.race(promises)})}returnp.then(()results);}首先声明一个results数组存储promise结果然后先取出limit个数的promise通过Promise.race可以拿到最快执行完的那一个我们前面会把每个promise对应在promises数组的位置index往下传递然后通过循环串成一个promise链在Promise.race的then方法中通过前面的index找到那个最快执行完的promise所在的位置将其替换最终promise链执行完将存储promise结果的results数组返回就行了。6.3 应用场景并发请求控制有时候为避免服务器性能问题可以使用Promise.limit进行并发控制以提高请求的响应速度批量处理限制当对大量数据进行处理时有时候一次性处理会导致服务器内存溢出这时可以采用Promise.limit控制同时处理的数据数量以提高资源的处理效率。队列调度在任务调度和队列管理中可以使用Promise.limit将所有任务放在固定大小的任务池中并限制同时执行的任务数量这样可以确保任务按照限制的并发度进行顺序执行避免资源竞争和过度负载。7. Promise.try7.1 介绍Promise.try可以把一个函数包装为一个 Promise。functiontest(a,b){console.log(调用test,a,b)returntest res;}Promise.try(test,a,b).then((res){console.log(then,res)}).catch((){console.log(catch);})/** * 打印结果 * 调用test a b * then test res */它也支持传入异步函数比如async函数。constpnewPromise((resolve,reject){setTimeout((){resolve(111);},3000)})asyncfunctiontest(a,b){awaitp;console.log(test,a,b)returntest res;}Promise.try(test,a,b).then((res){console.log(then,res)}).catch((){console.log(catch);})/** * 先等待3s然后打印结果如下 * 调用test a b * then test res */7.2 原理Promise.tryfunction(fn,...args){returnnewPromise((resolve,reject){try{resolve(fn(...args))}catch(e){reject(e)}})}Promise.try的函数签名为Promise.try(func, arg1, arg2, ...argN)它会把arg1, arg2, ...argN作为参数传递给func, 并以同步的方式立即执行func函数最后将其结果包装为一个Promise对象。7.3 应用场景它可以把一个函数包装为一个Promise对象比new Promise((resolve) resolve(func()))更加简洁。8. Promise.withResolvers8.1 介绍Promise.withResolvers函数经调用会返回一个新的Promise以及resolve和reject方法。const{promise,resolve,reject}Promise.withResolvers()8.2 原理Promise.withResolversfunction(){letresolve,reject;constpromisenewPromise((res,rej){resolveres;rejectrej;});return{promise,resolve,reject};}8.3 应用场景可以替代new Promise创建Promise对象使得promise、resolve和reject三个变量在同一个作用域中方便管理。小结以上给大家介绍了8个 Promise 相关方法以及各自应用场景其中需要注意Promise.try和Promise.withResolvers属于比较新的API使用时需注意其兼容性。如果还有兴趣想掌握手写Promise的话可以移步我之前写的文章前端高频面试题之手写Promise。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

访问网站的原理饮食网站建设策划书

导语 【免费下载链接】nunchaku-flux.1-krea-dev 项目地址: https://ai.gitcode.com/hf_mirrors/nunchaku-tech/nunchaku-flux.1-krea-dev Nunchaku团队基于FLUX.1-Krea-dev推出量化版本模型,通过SVDQuant技术实现4位精度压缩,在保持图像质量的同…

张小明 2026/1/7 12:33:43 网站建设

静态班级网站谁做网站

SkyReels-V2是一款革命性的开源视频生成模型,基于先进的Diffusion Forcing架构,能够实现真正意义上的无限长度视频生成。无论你是内容创作者、开发者还是AI爱好者,这个强大的工具都能为你的视频制作带来前所未有的可能性。 【免费下载链接】S…

张小明 2026/1/7 16:07:36 网站建设

网站规划与建设ppt模板下载快手极光视频小程序

Direct3D开发入门与渲染实践 1. Direct3D应用调试概述 调试Direct3D应用程序的管道有时是一项颇具挑战性的任务,因为影响结果的元素众多,要找出问题根源需要花费一番功夫和智慧。以下是Direct3D中需要不同调试技术的几个方面: - 调试Dire…

张小明 2026/1/7 16:07:33 网站建设

网站制作的重要性及步骤详解网站软件设计

从零打造高精度数字频率计:FPGA实战全解析你有没有遇到过这样的问题?手里的单片机测频,一到几百kHz就开始“飘”,数据跳得比心率还快。示波器又太贵,关键还不能集成进你的系统。别急——今天我们就用一块几十块钱的FPG…

张小明 2026/1/7 16:07:31 网站建设

可以自己做免费网站吗百度网盟

完美不是在没有什么可添加的时候,而是在没有什么可以去掉的时候。——法国作家安托万德圣-埃克苏佩里清华大学,伊利诺伊大学,上海AI实验室团队提出JustRL架构,仅用单阶段训练和固定超参数,在DeepSeek-R1-Distill-Qwen-…

张小明 2026/1/7 16:07:29 网站建设

北京网站设计制作招聘信息后端工资一般比前端高吗

文章目录 蜣螂优化算法(DBO)详解:从原理到实战 1 算法概述与生物基础 1.1 生物行为基础 1.2 算法基本思想 2 数学模型与算法原理 2.1 滚球蜣螂的数学模型 2.2 跳舞行为数学模型 2.3 繁殖行为数学模型 2.4 觅食行为数学模型 2.5 偷窃行为数学模型 3 算法流程与实现 3.1 整体算…

张小明 2026/1/7 16:07:27 网站建设