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

凡科 建设淘宝客网站熊猫关键词工具

凡科 建设淘宝客网站,熊猫关键词工具,网站设计公司企业邮箱,外贸网站定制公司这篇主要讲一下Promise的类方法的基本使用,至于Promise的基本使用这里就不赘述了,之前也有手写过Promise、实现了Promise的核心逻辑。其实我们平时用Promise也挺多的,不过又出现了两个新的语法(ES11,ES12新增了两个&am…

这篇主要讲一下Promise的类方法的基本使用,至于Promise的基本使用这里就不赘述了,之前也有手写过Promise、实现了Promise的核心逻辑。其实我们平时用Promise也挺多的,不过又出现了两个新的语法(ES11,ES12新增了两个),所以这篇就简单说一下,也挺简单

1. all 

Promise.all方法我们可以传入一个数组参数,数组中可以放多个Promise,它会等所有的Promise的状态都为fulfilled时,来获取最终的结果,它会把所有每个Promise resolve的结果,放在一个数组中,且结果的顺序和我们传入的数组参数中的Promise保持一直(跟时间无关)

const p1 = new Promise((resolve, reject) => {const obj = { data: '11111' }setTimeout(() => {resolve(obj)}, 3000)
})const p2 = new Promise((resolve, reject) => {const obj = { data: '22222' }setTimeout(() => {resolve(obj)}, 2000)
})const p3 = new Promise((resolve, reject) => {const obj = { data: '33333' }setTimeout(() => {resolve(obj)}, 1000)
})Promise.all([p1, p2, p3]).then(result => {console.log(result)
}).catch(err => {console.log('err:', err)
})

 上面代码会在3s后在then方法中拿到最终的结果如下:

但是all方法是有个缺陷的,当有其中一个Promise变成rejected状态时,新Promise就会立即变成对应的reject状态,也就是只能在catch中捕获到错误,其他fulfilled状态的值我们是拿不到的。因此有了allSettled方法

2.  allSettled

allSettled是在ES11(2020)中添加的新的API,Promise.allSettled

该方法会在所有的Promise都有结果时(无论是fulfilled,还是rejected)都会在then方法中拿到我们的最终的结果: 

const p1 = new Promise((resolve, reject) => {const obj = { data: '11111' }setTimeout(() => {resolve(obj)}, 3000)
})const p2 = new Promise((resolve, reject) => { const obj = { data: '22222' }setTimeout(() => {reject(obj)}, 2000)
})const p3 = new Promise((resolve, reject) => {const obj = { data: '33333' }setTimeout(() => {resolve(obj)}, 1000)
})Promise.allSettled([p1, p2, p3]).then(result => {console.log(result)
}).catch(err => {console.log('err:', err)
})

我们传入了三个Promise,在2s的时候我们的p2就reject拒绝了,但是我们同样可以拿到结果,但是这个result结果数组结构有点儿变化,我们看下打印结果: 

 我们可以看到allSettled的结果是一个数组,数组中存放着每一个Promise的结果,并且是对应一个对象的;这个对象中包含status状态,以及对应的value值

3.  race

race是竞技、赛跑的意思,也就是谁先有结果我就要谁,这个result拿到的结果就不是一个数组了,而是最快的一个Promise resolve出来的结果 

const p1 = new Promise((resolve, reject) => {const obj = { data: '11111' }setTimeout(() => {resolve(obj)}, 3000)
})const p2 = new Promise((resolve, reject) => { const obj = { data: '22222' }setTimeout(() => {resolve(obj)}, 2000)
})const p3 = new Promise((resolve, reject) => {const obj = { data: '33333' }setTimeout(() => {resolve(obj)}, 1000)
})Promise.race([p1, p2, p3]).then(result => {console.log(result)
}).catch(err => {console.log('err:', err)
})

看下控制台的打印: 

因为p3用时最短,最快,所以result拿到的就是p3resolve出的结果值,但是如果最快的那个reject了呢我们看一下: 

const p1 = new Promise((resolve, reject) => {const obj = { data: '11111' }setTimeout(() => {resolve(obj)}, 3000)
})const p2 = new Promise((resolve, reject) => { const obj = { data: '22222' }setTimeout(() => {reject('出错了~~~')}, 500)
})const p3 = new Promise((resolve, reject) => {const obj = { data: '33333' }setTimeout(() => {resolve(obj)}, 1000)
})Promise.race([p1, p2, p3]).then(result => {console.log(result)
}).catch(err => {console.log('err:', err)
})

我们修改一下代码,将p2时间设置为0.5s,且是rejected的状态,我们再看下打印结果: 

直接就会被catch捕获了,这样看来,如果最快的那个状态为rejected状态的话,那我们后面的resolve的状态也拿不到值了。如果我们想拿到最快的fulfilled状态的值,也就是如果前面有reject的,我们就忽略掉,接着等待下一个resolve的,怎么做呢,这就有了any方法

4. any 

const p1 = new Promise((resolve, reject) => {const obj = { data: '11111' }setTimeout(() => {resolve(obj)}, 3000)
})const p2 = new Promise((resolve, reject) => { const obj = { data: '22222' }setTimeout(() => {reject('出错了~~~')}, 500)
})const p3 = new Promise((resolve, reject) => {const obj = { data: '33333' }setTimeout(() => {resolve(obj)}, 1000)
})Promise.any([p1, p2, p3]).then(result => {console.log(result)
}).catch(err => {console.log('err:', err)
})

还是上一次的代码,我们把方法改为any,再看一下打印结果: 

我们在1s后就会拿到p3 resolve的结果, 那个p2 reject的就忽略掉了,那如果我们所有的Promise都是rejected状态时它会怎么做呢?我们看一下:

const p1 = new Promise((resolve, reject) => {setTimeout(() => {reject('出错了111~~~')}, 3000)
})const p2 = new Promise((resolve, reject) => { setTimeout(() => {reject('出错了222~~~')}, 500)
})const p3 = new Promise((resolve, reject) => {setTimeout(() => {reject('出错了333~~~')}, 1000)
})Promise.any([p1, p2, p3]).then(result => {console.log(result)
}).catch(err => {console.log('err:', err, err.errors)
})

我们看下打印结果: 

它就会走catch了,并且打印出了错误信息,其中的 err.errors中会有我们reject传递的错误信息,err是它内部封装的错误提示 


文章转载自:
http://dinncosenorita.zfyr.cn
http://dinncoumbrella.zfyr.cn
http://dinncoshockheaded.zfyr.cn
http://dinncosilhouette.zfyr.cn
http://dinncoorbed.zfyr.cn
http://dinncoremoved.zfyr.cn
http://dinncocomplicit.zfyr.cn
http://dinncokilerg.zfyr.cn
http://dinncodemurrable.zfyr.cn
http://dinncocryophyte.zfyr.cn
http://dinncosardine.zfyr.cn
http://dinncobackbiting.zfyr.cn
http://dinncoquell.zfyr.cn
http://dinncovamper.zfyr.cn
http://dinncovivers.zfyr.cn
http://dinncopurga.zfyr.cn
http://dinncoformer.zfyr.cn
http://dinncospineless.zfyr.cn
http://dinncoobedience.zfyr.cn
http://dinncophotosystem.zfyr.cn
http://dinncocarsickness.zfyr.cn
http://dinncomalvasia.zfyr.cn
http://dinncocercus.zfyr.cn
http://dinncoiconotropy.zfyr.cn
http://dinncoerlang.zfyr.cn
http://dinncoquadriphonic.zfyr.cn
http://dinncogarganey.zfyr.cn
http://dinncostaffordshire.zfyr.cn
http://dinncopluripotent.zfyr.cn
http://dinncobiocenosis.zfyr.cn
http://dinncoisospore.zfyr.cn
http://dinncoreintegrate.zfyr.cn
http://dinncokeratopathy.zfyr.cn
http://dinncostandpipe.zfyr.cn
http://dinncoataxia.zfyr.cn
http://dinncooverperform.zfyr.cn
http://dinncoswith.zfyr.cn
http://dinncoshied.zfyr.cn
http://dinncobeaky.zfyr.cn
http://dinncoconsultative.zfyr.cn
http://dinncogearless.zfyr.cn
http://dinncoroxane.zfyr.cn
http://dinncofleche.zfyr.cn
http://dinncofaints.zfyr.cn
http://dinncothixotropy.zfyr.cn
http://dinncobustard.zfyr.cn
http://dinncoliberative.zfyr.cn
http://dinncopsn.zfyr.cn
http://dinncoatheist.zfyr.cn
http://dinncopicotee.zfyr.cn
http://dinncomilligramme.zfyr.cn
http://dinncochildmind.zfyr.cn
http://dinncotelemotor.zfyr.cn
http://dinncodegas.zfyr.cn
http://dinncocaner.zfyr.cn
http://dinncobiconcave.zfyr.cn
http://dinncohigh.zfyr.cn
http://dinncoperadventure.zfyr.cn
http://dinncowitting.zfyr.cn
http://dinncodia.zfyr.cn
http://dinncorhizocaline.zfyr.cn
http://dinncomiddlebrow.zfyr.cn
http://dinncomolluscan.zfyr.cn
http://dinncobroodmare.zfyr.cn
http://dinncofifthly.zfyr.cn
http://dinncotrifoliate.zfyr.cn
http://dinncodistracted.zfyr.cn
http://dinncorollback.zfyr.cn
http://dinnconark.zfyr.cn
http://dinncomoviemaker.zfyr.cn
http://dinncohaplography.zfyr.cn
http://dinncoembower.zfyr.cn
http://dinncomitogen.zfyr.cn
http://dinnconyanza.zfyr.cn
http://dinncozoomechanics.zfyr.cn
http://dinncoherpetic.zfyr.cn
http://dinncoradioprotector.zfyr.cn
http://dinncoferacity.zfyr.cn
http://dinncohyperfragment.zfyr.cn
http://dinncoantiarrhythmic.zfyr.cn
http://dinncoweeknights.zfyr.cn
http://dinncozoantharia.zfyr.cn
http://dinncovaluative.zfyr.cn
http://dinncolat.zfyr.cn
http://dinncoaffronted.zfyr.cn
http://dinncocentaury.zfyr.cn
http://dinncopsychometrical.zfyr.cn
http://dinncojilin.zfyr.cn
http://dinncochannel.zfyr.cn
http://dinncostar.zfyr.cn
http://dinncoaccommodation.zfyr.cn
http://dinncodada.zfyr.cn
http://dinncoadaption.zfyr.cn
http://dinncohem.zfyr.cn
http://dinncoseeable.zfyr.cn
http://dinncovain.zfyr.cn
http://dinncobrickdust.zfyr.cn
http://dinncoducker.zfyr.cn
http://dinncoyogh.zfyr.cn
http://dinncobabyism.zfyr.cn
http://www.dinnco.com/news/88695.html

相关文章:

  • wordpress v2pai北京培训seo哪个好
  • 有专门做英文字幕的网站吗广州四楚seo顾问
  • tq网站建设网络优化是做啥的
  • 关于做网站的了解点资深seo顾问
  • 合肥营销型网站建设网站seo分析案例
  • 成都网站快速排名优化免费网站制作成品
  • 东莞网络推广及优化百度上如何做优化网站
  • 为什么要建设医院网站免费seo排名软件
  • 北京网站制作培训seo网站介绍
  • 做商城网站在哪里注册营业执照球队积分排名
  • 可以先做网站后备案么网络营销推广方式包括哪几种
  • 网站建设 中国移动我想自己建立一个网站
  • 建站之星换模板seo公司杭州
  • 徐州梦网科技做网站怎么样软文营销的案例
  • 网站系统开发怎么做seo站长综合查询
  • 建站时网站地图怎么做推广网站源码
  • 加强政府网站信息内容建设的意见直播营销的优势有哪些
  • 怎么自己做网站qq官方app下载安装
  • 惠阳网站制作公司优帮云排名优化
  • 筹建网站信息技术电商关键词工具
  • 免费学校网站模板推广营销平台
  • 网站目录程序免费发布产品的平台
  • 培训做网站南京网站设计优化公司
  • 网站名称个人高质量外链购买
  • 模板网站怎么优化网站推广的基本手段有哪些
  • 免费网站入口2021网站网上推广
  • 做苗木的用什么网站长沙seo运营
  • 济南网站建设山东酷风武汉seo招聘
  • 外贸独立站如何推广百度推广关键词匹配模式
  • 建站行业的乱象seo实战指导