请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于Promise.all优化问题

老师,关于下面一段代码重复太多,我想请教两个优化问题:
1、这里2个Promise.all数组里面的方法前两个都一样,因为这里面方法都是立即调用执行,怎么才能优化成通过判断条件修改数组里的执行函数,而不是写两个Promise.all。
2、then和catch里面的两行代码也是重复的,在当前业务就是有结果了就取消2个加载动画,这里可以优化成只写一次取消加载动画吗。

if (this.checkbox) {
     Promise.all([
         this.getSysRoleList(id),
         this.getDataRoleList(id),
         this.getCheckedSysRole(id)
     ])
         .then(res => {
             // 取消加载动画
             this.loading = false
             this.roleLoading = false
         })
         .catch(err => {
             this.loading = false
             this.roleLoading = false
         })
 } else {
     Promise.all([
         this.getSysRoleList(id),
         this.getDataRoleList(id)
     ])
         .then(res => {
             this.loading = false
             this.roleLoading = false
         })
         .catch(err => {
             this.loading = false
             this.roleLoading = false
         })
 }

正在回答 回答被采纳积分+3

2回答

慕的地5354100 2021-04-27 00:28:14

//每个子函数用Promise返回

var getSysRoleList = ()=>{

    return new Promise((resolve,reject)=>{

        resolve('getSysRoleList')

    })

}


var open = (checkbox)=>{

let arr = []

if (checkbox) {

arr = [

getSysRoleList(),

getDataRoleList(),

getCheckedSysRole()

]

}else{

arr = [

getSysRoleList(),

getDataRoleList(),

]

}

Promise.all(arr)

.then((res)=>{

console.log(res)

})

console.log(arr)

}


0 回复 有任何疑惑可以回复我~
双越 2021-03-26 23:11:42

第一,优化就是用缓存。例如,写一个 async 函数,第一次用异步查询,并将结果缓存起来,接下来就可以直接使用缓存结果了。

第二,这个优化,根据目前的信息,我就帮不上忙了,因为我都不知道你为啥会有两个 loading 。想优化这个,得先把两个 loading 合并为一个,从 loading 功能上优化,然后这段代码自然就没有问题了。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信