如何合理的封装一个Promise对象?
现在有如下方法:
isProvid(){
return this.$store.dispatch('isSupported')
}
该方法只考虑正确返回的情况,因为其他异常通过axios
的拦截器里面处理掉了,返回值里面包含一个code
,如果code
不为空,表示有业务错误,需要前端提示,否则表示正确。
现在有三个地方
需要调用该方法,如果有错误(code不为空),所有调用方法的错误处理方式都一样——弹出alert就好
,如果正确,有两个调用的地方需要自行处理,如下:
//第一处调用
this.isProvid().then(res => {
//处理A逻辑
})
//第二处调用
this.isProvid().then(res => {
//处理B逻辑
})
//第一处调用(不处理任何逻辑)
this.isProvid()
那么,isProvid
应该如何封装呢?
自己的思路
isProvid(){
return this.$store.dispatch('isProvid').then(res => {
let code = res.data.code;
if(!code){//code不为空,表示有错误信息
alert('弹出根据code对应的错误信息')
return Promise.reject()//不需要返回错误信息,因为这里已经集中处理了
}else{
//如果正确,不返回任何东西,因为调用方不需要根据返回值来判断
return Promise.resolve()
}
})
}
注意:三个调用方都是以then
方式来调用isProvid
方法
疑问如下:
1、这么写正确么?
2、return this.$store.dispatch('isProvid')
返回的就是promise
,但是then
里面又包含了return Promise
返回promise
对象,是什么意思呢?(看到有人这么写,但是不知道这么写正确不)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果
this.$store.dispatch('isProvid')
是一个promise你完全可以这么写, 效果如你写的是一样的:但你这样写,多次调用其实是浪费的, 甚至出现多个(alert)报错, 更好一点的做法是你并不需要
isProvid
方法:想象成一个序列
promise1.then(() => promise2).then(() => promise3)
则为执行完promise1后再执行promise2,然后再执行promise3
谢邀,这么写没问题的。或者 else 去掉都可以。
按照你目前的封装没有问题的啊,只不过每个
.isProvid()
都会调用一个.dispatch()
如果你是希望每个
.isProvide()
都返回的是对同一个.dispatch()
的结果,那可以参考 jQuery Promise 的done()
事件。Promise 的 then 链会改动对象主体,需要采用事件的方式来实现对同一个主体注册多个处理函数。