如何合理的封装一个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对象,是什么意思呢?(看到有人这么写,但是不知道这么写正确不)


四季花海
浏览 769回答 2
2回答

江户川乱折腾

按照你目前的封装没有问题的啊,只不过每个 .isProvid() 都会调用一个 .dispatch()如果你是希望每个 .isProvide() 都返回的是对同一个 .dispatch() 的结果,那可以参考 jQuery Promise 的 done() 事件。Promise 的 then 链会改动对象主体,需要采用事件的方式来实现对同一个主体注册多个处理函数。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript