您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

实现手写承诺的所有方法 《电影网站源码》

  • 时间:2022-09-02 09:02 编辑: 来源: 阅读:306
  • 扫一扫,手机访问
摘要:实现手写承诺的所有方法 《电影网站源码》
前言上次,我们手写了一份承诺。我相信你对承诺有很深的理解。这一次,我们将实现所有相关的承诺方法。 Promise . prototype . catch promise . prototype . catch = function(on rejected){ return this . then(null,on rejected)} catch方法比较简单,就是调用promise本身的then方法,只传入失败的回调。 因为then方法本身就具有值的传递性,所以我们只需要传入失败的回调,即使没有回调成功,值也会自动传入。 Promise.prototype.finally将执行finally promise . prototype . finally = function(on finished){ return this . then(val = >;{ onFinished() return val })。catch((err)= & gt;{ON FINISHED () RETURN ERR}}最后需要注意的是,finally的回调没有参数promise。如果成功,成功值会正常传递,不会被finally破坏。例如,如果promise失败,则与promise.resolve (1)相同。最后(val = >;console . log(val))//un find。然后(val = & gtconsole . log(val))//1妥协。拒绝(“错误”)。最后(val = & gtconsole . log(val))//un find。catch(err = & gt;console . log(err))//error promise . resolve返回成功的承诺。resolve = function(val){ return new promise(resolve = >;{resolve (val)}} Emmm一看就懂形象承诺。Reject返回一个失败的承诺。reject = function(val){ return new promise((resolve,reject)= >;{reject (val)}}什么都不要说。 ImagePromise.all返回一个承诺实例。 当iterable参数中的所有promise都被解析时,接受iterable对象将被reslove,如果有一个被拒绝,这个实例将被拒绝。 如果iterable没有承诺,则直接解析该实例。 返回值是一个数组,数组的值按照iterable的迭代顺序排列。 Promise . all = function(PS){ let resolve let reject const Promise = new Promise((r,j)= & gt;{ resolve = r reject = j })let fufilled count = 0 let index = 0;const ret =[];const wrapFufilled = i = & gt{ return val = & gt{ fufilledCount+= 1 ret[I]= val if(fufilledCount & gt;= index){ resolve(ret)} } } const wrap rejected = I = & gt;{ return err = & gt{ reject(err)} } for(let p of PS){ promise。解决(p)。然后(包装(指数),包装拒收(指数))指数+= 1}退货承诺}注意几个重点。因为我们接受一个iterable对象(iterable),所以我们使用for遍历。 让我们用Promise.resolve()包装所有承诺 wrapped的目的是记录当前遍历的索引。 承诺。种族回报承诺。一旦迭代器中的承诺被处理或拒绝,返回的承诺将被处理或拒绝。 Promise . race = function(PS){ let resolve let reject const Promise = new Promise((r,j)= & gt;{ resolve = r reject = j }) for(让p of ps) { Promise.resolve(p)。然后(val = & gtresolve(val),err = & gtreject(err)} return promise } promise . any只要其中一个承诺成功,就会返回成功的承诺。 如果iterable对象中没有一个承诺成功(即所有承诺都失败/拒绝),则返回失败的承诺和AggregateError类型的实例,它是Error的子类,用于将单个错误聚合在一起。 本质上这个方法和promise . all()promise . any = function(PS){ let resolve let reject const promise = new promise((r,j)= >;{ resolve = r reject = j })let errCount = 0 let pCount = 0 for(let p of PS){ pCount+= 1 promise . resolve(p)。然后(val = & gtresolve(val),err = & gt{ errCount+= 1 if(errCount & gt;= pCount){ reject(new aggregate error(' All promises rejected ')} })} return promise } promise . All settled返回所有给定承诺完成或被拒绝后的承诺,用一个对象数组表示,每个对象代表相应的承诺结果。 下面举个例子:const promise 1 = promise . resolve(3);const Promise 2 = new Promise((resolve,reject)= & gt;setTimeout(reject,100,' foo ');const promises =[promises 1,promises 2];Promise.allSettled(承诺)。然后((结果)= & gtresults . foreach((result)= & gt;console . log(result)));//输出结果//object {status: "fulfilled ",value:3 }//object { status:" rejected ",Reason: "foo"}具体实现:promise . all settled = function(PS){ let resolve let reject const promise = new promise((r,j)= >;{ resolve = r reject = j })let finished count = 0 let index = 0;const ret =[];const wrapFufilled = i = & gt{ return val = & gt{ finished count+= 1 ret[I]= { status:' fufilled ',value:val } if(finished count & gt;= index){ resolve(ret)} } } const wrap rejected = I = & gt;{ return err = & gt{ finished count+= 1 ret[I]= { status:' rejected ',value:err } if(finished count & gt;= index) { resolve(ret) } } } for(让p of ps) { Promise.resolve(p)。然后(wrapFufilled(index),wrapRejected(index)) index += 1 }退货承诺}


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【域名/主机/服务器|】qq邮箱提醒在哪里打开(2024-06-04 18:58)
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部