首页 分享 promise.all([]).then(() => {}).catch(() => {})异步处理

promise.all([]).then(() => {}).catch(() => {})异步处理

来源:花匠小妙招 时间:2024-11-10 20:21

场景:在同一时间,同时调用相同的接口(唯一不同:接口传参不一样)

简单写法:

Promise.all([this.snapApi(this.list[0].deviceId,0),this.snapApi(this.list[1].deviceId,1) ]).then(() => {//成功时候操作(特别要注意这里面,如果是下标0,还是下标1,执行完都会执行到这里来,而且没有先后顺序,完全是看snapApi函数执行的速度!!!!!!) }).catch(() => {//失败操作 }) 12345678

那么 当list数组字段长度未知时,采用

this.list.forEach((item, index) => {Promise.all([this.snapApi(item.deviceId, index)]).then(() => {//现在执行场景就是,当list数组,执行完snapApi函数后,进行后续操作(执行最后一个参数,返回成功时在执行下面内容)//错误写法(例如,下标1,执行完,那么当时index是1,会执行if里面的操作,而然并没有下标0,操作返回就执行后续操作,血的教训!!!!!千万不要这么写)//可以在snapApi中加累加器 ,然后这里通过if判断累加的个数是否与list数组个数相同在执行后续操作(有大神有更好,欢迎推荐)if(index === this.list.length -1) {}}).catch(() => {//错误操作}) }) 1234567891011121314

也可以在promise.all([])数组里直接调用接口

this.list.forEach((item, index) => {Promise.all([apis.snap({deviceinfoId: item.deviceId})]).then(([img]) => { //这数组里面的东西,就是接口返回的内容//返回数据进行 业务操作}).catch(() => {}) }) 1234567891011

补充
同时执行两个接口

async getData() {let [res1,res2] = await Promise.all([getEncodeParam(param), getVideo(param2)].map(api => {//返回接口的错误,这样即使有一个接口报错,也能获取另外一个成功的接口数据return api.catch(function(err) {return err;})})) } 1234567891011

相关知识

异常处理与命名空间
利用基因芯片研究水稻强弱势颖花异步灌浆分子机制[创新技巧]
理解Spring定时任务@Scheduled的两个属性fixedRate和fixedDelay
input string was not in a correct
HarmonyOS NEXT开发实战教程:选择相册和拍照
【四分之三[三分之二(二分之一X
【解方程组x+y=500【(1+50%)x+(1+40%)y】×90%=500+157】
基于物联网的智能植物养护系统的设计与实现
基于SpringBoot+Vue+MySQL的手机销售管理系统
从select查询中将强制转换的值提取到数组中

网址: promise.all([]).then(() => {}).catch(() => {})异步处理 https://www.huajiangbk.com/newsview473721.html

所属分类:花卉
上一篇: 花篮式工字钢悬挑梁
下一篇: 战疫情 吉华年花年桔回收与防疫两

推荐分享