为了账号安全,请及时绑定邮箱和手机立即绑定

如何合理的封装一个Promise对象?

如何合理的封装一个Promise对象?

慕田峪4524236 2019-05-22 15:29:20
现在有如下方法:isProvid(){returnthis.$store.dispatch('isSupported')}该方法只考虑正确返回的情况,因为其他异常通过axios的拦截器里面处理掉了,返回值里面包含一个code,如果code不为空,表示有业务错误,需要前端提示,否则表示正确。现在有三个地方需要调用该方法,如果有错误(code不为空),所有调用方法的错误处理方式都一样——弹出alert就好,如果正确,有两个调用的地方需要自行处理,如下://第一处调用this.isProvid().then(res=>{//处理A逻辑})//第二处调用this.isProvid().then(res=>{//处理B逻辑})//第一处调用(不处理任何逻辑)this.isProvid()那么,isProvid应该如何封装呢?自己的思路isProvid(){returnthis.$store.dispatch('isProvid').then(res=>{letcode=res.data.code;if(!code){//code不为空,表示有错误信息alert('弹出根据code对应的错误信息')returnPromise.reject()//不需要返回错误信息,因为这里已经集中处理了}else{//如果正确,不返回任何东西,因为调用方不需要根据返回值来判断returnPromise.resolve()}})}注意:三个调用方都是以then方式来调用isProvid方法疑问如下:1、这么写正确么?2、returnthis.$store.dispatch('isProvid')返回的就是promise,但是then里面又包含了returnPromise返回promise对象,是什么意思呢?(看到有人这么写,但是不知道这么写正确不)
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

如果this.$store.dispatch('isProvid')是一个promise你完全可以这么写,效果如你写的是一样的:
isProvid(){
returnthis.$store.dispatch('isProvid').then(res=>{
letcode=res.data.code;
if(!code){//code不为空,表示有错误信息
alert('弹出根据code对应的错误信息')
throw"";
}
})
}
但你这样写,多次调用其实是浪费的,甚至出现多个(alert)报错,更好一点的做法是你并不需要isProvid方法:
letemptFn=()=>{};//定义一个空错误处理函数,用来除警告;
//第一处调用(不处理任何逻辑,只用来报错)
this.isProvid=this.$store.dispatch('isProvid').then(res=>{
letcode=res.data.code;
if(!code){//code不为空,表示有错误信息
alert('弹出根据code对应的错误信息')
throw"";
}
});
//isProvid不是一个方法就是一个promise对像
this.isProvid.then(res=>{
//处理A逻辑
},emptFn)
this.isProvid.then(res=>{
//处理B逻辑
},emptFn)
                            
查看完整回答
反对 回复 2019-05-22
  • 2 回答
  • 0 关注
  • 342 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号