2017-05-30 85 views
0

我通過AngularJS開發了這是app.Domain.GenericModel.EntityBase(我一般模型) 此相同的簽名許多異步函數是一個示例:返回無極< void >,而不是承諾<any>

get(resource: string): ng.IPromise<app.Domain.GenericModel.EntityBase[]> { 
      var self = this; 
      var deferred = self.qService.defer(); 
      self.httpService.get(resource).then(function (result: any) { 
       deferred.resolve(result.data); 
      }, function (errors) { 
       self.exception = new app.Exceptions.Model.Exception(errors.status, errors.statusText); 
       deferred.reject(self.exception); 
      }); 

      return deferred.promise; 
     } 

然後我試圖調用一些服務,這類似於前一個與鏈promises.So,我得到這個錯誤:「類型IPromise是不能分配給鍵入IPromise,類型EntityBase是不能分配給類型爲void」

var self = this; 
    var promise = self.$q.when(); 
    promise = promise.then(() => { 
              return self.EcritureService.get(critureToSave); 
             }).then((compte: EntityBase) => { 
              return self.CompteService.getSingle(Number(data.compte)); 
             }).then((EntityBase) => { 
              currentAccount.montantCpt = currentAccount.montantCpt + montant; 
              return self.CompteService.update(currentAccount:EntityBase); 
             }); 

我搜索了很多這個困境和所有我有,一個不起眼的方法,通過類型斷言,我主要基於編譯器的欺騙或類似的東西,將我的函數的返回值轉換爲常見模式「IPromise」。 如果其他人有一個想法,我沒有理解這個訣竅。不管它有效與否,他都可以澄清它。

回答

0

隱含地,在您的示例中,變量promise的類型將爲ng.IPromise<void>,因爲這就是$q.when()返回的結果。
類型ng.IPromise<void>的變量無法獲得分配給它的對象ng.IPromise<EntityBase>
根據你想要達到的目標,你可以做不同的事情。

您可以使用另一個變量來保存你以後的承諾:

let anotherPromise = promise.then(() => { ... 

您可以顯式聲明的變量的類型是ng.IPromise<any>開頭:

let promise: ng.IPromise<any> = self.$q.when(); 
let promise = promise.then(() => { ... 

或者你可以有你的承諾鏈最終實際返回承諾無效:

promise = promise.then(() => {... your chain ...}).then(() => { }); 

也可能有其他選項,但我希望有所幫助。

+0

我正在尋找如何執行循環的每次迭代必須執行的鏈接的承諾..這就是全部 –

相關問題