我已经获得了一个可以同时呼叫的服务呼叫列表,但我还有另外一个呼叫必须被呼叫,并在其他呼叫被解雇之前完成。我设置了这个,所以其他调用没有发生,直到调用的.then(function() {})
块。检查Chrome开发工具(并根据Sql错误获得确认),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函数:
addExisting = (operationId: number, partnerId: number) => {
return this.$http.put(`my/path/to/operation/${operationId}/partner/${partnerId}`);
};
因此,executeSaves
中包含4个不同服务调用的内容在partnerAddRepository.addExisting
调用被触发之前被调用,为什么?
答案 0 :(得分:2)
您拨打电话后立即执行服务电话。 Promise延迟函数调用的返回值,而不是函数的执行。
如果只想在partnerAddRepository.addExisting
返回一个值后调用另一个函数,那么你应该在then
回调中创建一个promises数组。
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);
});