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

发布于 2022-09-06 19:38:26 字数 734 浏览 20 评论 0

对promise不是很熟悉,导致有时候希望想分装一个方法,让其返回一个promise对象(调用方可以通过.then的方式调用),感觉怎么写都不太对劲,特来请教,谢谢!

例如如下代码,我想把xxxApiapi调用逻辑和todo()业务逻辑分开,

    let datas = {
      param1: '',
      param2: '',
      param3: '',
    };
 
    this.$store.dispatch('xxxApi', datas).then((res) => {
        //todo()
    }).catch(err => {
        
    })

改成如下方式——除todo外,其他逻辑分装到isProvid()方法里面——该方法返回 promise

isProvid().then(res => { //todo })

改怎么实现呢?直接如下就可以了么?

function isPrvid(){
    let datas = {
      param1: '',
      param2: '',
      param3: '',
    };
    return this.$store.dispatch('xxxApi', datas)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

抱着落日 2022-09-13 19:38:26

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

请你别敷衍 2022-09-13 19:38:26

我测试了一下,这样是可以的,但是如果不让直接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) //返回未知错误信息
})
烏雲後面有陽光 2022-09-13 19:38:26

首先,是的。

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

function isPrvid() {
  return this.$store.dispatch('api', data)
    .then(res => {
      if (res.isShow) {
        return res;
      }
      throw new Error(err);
    });
}    

至于 Promise 的用法,我还做过一次讲堂,应该算说的很详细了:Promise 的 N 种用法

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文