2016-06-23 1 views
1

동시에 호출 할 수있는 서비스 호출 목록이 있지만 다른 호출이 호출되기 전에 반드시 호출되어야하는 다른 호출이 하나 있습니다 . 다른 전화가 .then(function() {}) 통화 차단 때까지 발생하지 않도록 설정했습니다. Chrome Dev Tools를 확인하고 Sql 오류를 기반으로 확인을하면 then 절의 모든 호출이 실행됩니다. 여기서 내가 뭘 잘못하고 있니?원래 함수 앞에있는 then 절의 각도 점화 함수

 var promises = []; 

     if (this.partner.customerId > 0) { 
      if (this.isDirty('ipn.individualPartnerName')) { 
       promises.push(this.partnerEditService.updateIndividualName(<Interfaces.IIndividualPartner>this.partner)); 
      } 

      if (this.isDirty('bpa.mailingAddressForm') || this.isDirty('bpa.streetAddressForm')) { 
       promises.push(this.partnerEditService.updateAddresses(this.partner)); 
      } 

      if (this.isDirty('bn.businessName')) { 
       promises.push(this.partnerEditService.updateBusinessName(<Interfaces.IBusinessPartner>this.partner)); 
      } 

      if (this.isDirty('rc.individualPartnerResponsibilities') || this.isDirty('rc.businessPartnerResponsibilities')) { 
       promises.push(this.partnerEditService.updateResponsibilities(this.operation, this.partner)); 
      } 
     } 

     this.partnerAddRepository.addExisting(this.operation.operationId, this.partner.customerId) 
      .then(() => { 
       this.executeSaves(promises); 
      }); 


    executeSaves = (promises) => { 
     this.$q.all(promises) 
      .finally(() => { 
       this.$mdDialog.hide(this.partner); 
      }); 
    } 

그리고 여기에는 partnerAddRepo.addExisting 기능입니다 :

partnerAddRepository.addExisting 호출이 발사되기 전에 그래서, 4 가지 서비스 호출을 포함하는 executeSaves의 물건이라고하고있다
addExisting = (operationId: number, partnerId: number) => { 
     return this.$http.put(`my/path/to/operation/${operationId}/partner/${partnerId}`); 
    }; 

, 왜?

+1

어, 아래쪽 설명을주의하십시오. – ganders

+0

타이밍이 될 수 있습니까? 약속을 배열로 밀어 넣을뿐 아니라 약속을 되 돌리는 모든 것을 발사합니다. – lintmouse

답변

2

서비스 호출은 사용자가 전화하는 즉시 실행됩니다. 약속은 함수 호출의 반환 값을 지연하고 함수의 실행을 지연시키지 않습니다.

당신이 partnerAddRepository.addExisting가 값을 반환 한 후에 만 ​​다른 함수를 호출 할 경우에, 당신은 then 콜백에서 약속의 배열을 만들어야합니다.

this.partnerAddRepository.addExisting(this.operation.operationId, this.partner.customerId) 
    .then(() => { 
     var promises = []; 

     if (this.partner.customerId > 0) { 
      if (this.isDirty('ipn.individualPartnerName')) { 
       promises.push(this.partnerEditService.updateIndividualName(<Interfaces.IIndividualPartner>this.partner)); 
      } 

      if (this.isDirty('bpa.mailingAddressForm') || this.isDirty('bpa.streetAddressForm')) { 
       promises.push(this.partnerEditService.updateAddresses(this.partner)); 
      } 

      if (this.isDirty('bn.businessName')) { 
       promises.push(this.partnerEditService.updateBusinessName(<Interfaces.IBusinessPartner>this.partner)); 
      } 

      if (this.isDirty('rc.individualPartnerResponsibilities') || this.isDirty('rc.businessPartnerResponsibilities')) { 
       promises.push(this.partnerEditService.updateResponsibilities(this.operation, this.partner)); 
      } 
     } 

     this.executeSaves(promises); 
}); 
+0

완벽한 선생님, 감사합니다. .then() – ganders

+0

에 전체 덩어리를 중첩 할 필요가 없다고 생각했을 텐데, 아마도 그 덩어리를 함수에 넣고 그 함수를 호출했을 것입니다. 이 방법은 'then'이 덜 지저분합니다. – yarons