2017-04-06 51 views
1

我有這將創建一個新的承諾的行動,並返回一個決心:生成一些Promise而不響應所有這些Promise?

actions: { 
    myAction(context, data) { 
     return new Promise((resolve, reject) => { 
      this.$http("/api/something").then(response => { 
       resolve(response); 
      }, error => { 
       reject(error); 
      }) 
     }) 
    } 
} 

現在,我有兩個組件調用這個動作(產生兩個新的承諾),但只有第二個函數需要以後做其他動作決心到來。

firstCall: function() { 
    this.$store.dispatch("myAction"); 
} 

secondCall: function() { 
    this.$store.dispatch("myAction").then(response => { 
     //Do something after receiving new data 
    }, error => { 
     console.error("Error") 
    }) 
} 

這是一個錯誤/不好的做法,產生無極沒有迴應其所有做出決議?

+0

如果你不需要做任何事情,那麼你不需要做任何事情。這沒有錯。 – deceze

+0

您不需要包裝額外的'新的Promise',只需返回'this。$ http'的結果。 –

回答

3

這是一個錯誤/不正確的做法來產生一個承諾,而沒有響應其所有的決議?

這是罰款不必然地處理決議,但不處理拒絕一般是不良的做法(實際上,現在可以生成從上最新的瀏覽器的警告;和的NodeJS即將更新[除非它已經已經]終止其未處理拒絕流程)。

所以你要確保你catch任何錯誤:

firstCall: function() { 
    this.$store.dispatch("myAction") 
     .catch(error => /* something here */); 
} 

secondCall已經在做的是,隨着第二個參數then


無關,但代碼展品承諾創造 - 反模式。你不需要一個新的承諾,你已經有了。剛:

actions: { 
    myAction(context, data) { 
     return this.$http("/api/something"); 
    } 
} 

這不正是代碼做什麼,但更有效。即使您在then處理程序中執行了某些操作,但由於then返回了新的承諾,因此您不需要new Promise

相關問題