鍍金池/ 問答/HTML/ 如何合理的返回一個(gè)promise對象?

如何合理的返回一個(gè)promise對象?

對promise不是很熟悉,導(dǎo)致有時(shí)候希望想分裝一個(gè)方法,讓其返回一個(gè)promise對象(調(diào)用方可以通過.then的方式調(diào)用),感覺怎么寫都不太對勁,特來請教,謝謝!

例如如下代碼,我想把xxxApiapi調(diào)用邏輯和todo()業(yè)務(wù)邏輯分開,

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

改成如下方式——除todo外,其他邏輯分裝到isProvid()方法里面——該方法返回 promise

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

改怎么實(shí)現(xiàn)呢?直接如下就可以了么?

function isPrvid(){
    let datas = {
      param1: '',
      param2: '',
      param3: '',
    };
    return this.$store.dispatch('xxxApi', datas)
}
回答
編輯回答
浪蕩不羈

可以啊,你不是寫了嗎 自己測試一下可以

2018年3月9日 08:37
編輯回答
愛是癌

我測試了一下,這樣是可以的,但是如果不讓直接return this.$store.dispatch('xxxApi', datas),而要自己根據(jù)返回的內(nèi)容來 構(gòu)建一個(gè) promise改如何寫呢?

是不是應(yīng)該這么寫呢?

//調(diào)用dispatch后,不管是正確還是錯(cuò)誤,都返回一個(gè)自定義的`promise`對象,而不是返回調(diào)用dispatch默認(rèn)的promise對象(根據(jù)自身業(yè)務(wù)進(jìn)行包裝了一下),這么理解正確么?
this.$store.dispatch('xxxApi', datas).then(res => {
    if(res.isShow){ //業(yè)務(wù)上判斷正確
        return new Promise(function(resolve, reject){
            resolve(res) //第三方調(diào)用,then里面可以獲取到 res 信息,對不?
        })
    }else{
        return Promise.reject(err) //返回自定義(業(yè)務(wù))錯(cuò)誤信息
    }
}).catch(err +> {
    return Promise.reject(err) //返回未知錯(cuò)誤信息
})
2018年8月13日 09:36
編輯回答
神經(jīng)質(zhì)

首先,是的。

其次,這段代碼最好改成,這樣更符合 Promise 的標(biāo)準(zhǔn)用法:

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

至于 Promise 的用法,我還做過一次講堂,應(yīng)該算說的很詳細(xì)了:Promise 的 N 種用法。

2018年6月30日 07:08