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

如何合理的返回一个promise对象?

如何合理的返回一个promise对象?

森林海 2019-03-15 18:15:56
对promise不是很熟悉,导致有时候希望想分装一个方法,让其返回一个promise对象(调用方可以通过.then的方式调用),感觉怎么写都不太对劲,特来请教,谢谢!例如如下代码,我想把xxxApiapi调用逻辑和todo()业务逻辑分开,    let datas = {      param1: '',      param2: '',      param3: '',    };     this.$store.dispatch('xxxApi', datas).then((res) => {        //todo()    }).catch(err => {            })改成如下方式——除todo外,其他逻辑分装到isProvid()方法里面——该方法返回 promiseisProvid().then(res => { //todo })改怎么实现呢?直接如下就可以了么?function isPrvid(){    let datas = {      param1: '',      param2: '',      param3: '',    };    return this.$store.dispatch('xxxApi', datas)}
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

可以啊,你不是写了吗 自己测试一下可以


查看完整回答
反对 回复 2019-03-19
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我测试了一下,这样是可以的,但是如果不让直接return this.$store.dispatch('xxxApi', datas),而要自己根据返回的内容来 构建一个 promise改如何写呢?


是不是应该这么写呢?


//调用dispatch后,不管是正确还是错误,都返回一个自定义的`promise`对象,而不是返回调用dispatch默认的promise对象(根据自身业务进行包装了一下),这么理解正确么?

this.$store.dispatch('xxxApi', datas).then(res => {

    if(res.isShow){ //业务上判断正确

        return new Promise(function(resolve, reject){

            resolve(res) //第三方调用,then里面可以获取到 res 信息,对不?

        })

    }else{

        return Promise.reject(err) //返回自定义(业务)错误信息

    }

}).catch(err +> {

    return Promise.reject(err) //返回未知错误信息

})


查看完整回答
反对 回复 2019-03-19
?
杨魅力

TA贡献1811条经验 获得超6个赞

首先,是的。


其次,这段代码最好改成,这样更符合 Promise 的标准用法:


function isPrvid() {

  return this.$store.dispatch('api', data)

    .then(res => {

      if (res.isShow) {

        return res;

      }

      throw new Error(err);

    });

}    

查看完整回答
反对 回复 2019-03-19
  • 3 回答
  • 0 关注
  • 2586 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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