猿问

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

对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)

}


森林海
浏览 2587回答 3
3回答

江户川乱折腾

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

鸿蒙传说

我测试了一下,这样是可以的,但是如果不让直接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) //返回未知错误信息})

杨魅力

首先,是的。其次,这段代码最好改成,这样更符合 Promise 的标准用法:function isPrvid() {  return this.$store.dispatch('api', data)    .then(res => {      if (res.isShow) {        return res;      }      throw new Error(err);    });}    
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答