Angular 6 :带有RxJS的Angular多个HTTP请求(updatePhone和updateAddress),它们彼此不依赖,但可能一起执行,也可能不一起执行。
情况1:对“地址”字段(地址,州,城市或邮政编码)进行的更改,我需要调用updateAddress api。
情况2:对“电话”字段(phoneNumber或phoneType)进行了更改,我需要调用updatePhone api。
情况3::如果地址和电话都更改了,我需要更改updateAddress和updatePhone api。
我尝试了
import { forkJoin, combineLatest, Observable } from 'rxjs';
let phoneUpdate, addressUpdate;
if (this.isPhoneUpdateApi)
phoneUpdate = this.customerService.updatePhone(phoneUpdateRequest);
if (this.isAddressUpdateApi)
addressUpdate = this.customerService.updateAddress(addressUpdateRequest);
const combined = combineLatest(phoneUpdate, addressUpdate);
combined.subscribe(
([phoneUpdateResponse, addressUpdateResponse]) => {
console.log(
`Phone Update Response: ${phoneUpdateResponse.model},
Address Update Response: ${addressUpdateResponse.model}`
);
this.isPhoneUpdateApi = false;
this.isAddressUpdateApi = false;
console.log('this.isAddressUpdateApi', this.isAddressUpdateApi, 'this.isPhoneUpdateApi', this.isPhoneUpdateApi);
});
但是如果仅更改电话而不更改地址,则 combineLatest()不起作用。
我不确定该如何处理。
答案 0 :(得分:1)
您可以为此使用forkJoin
。
reqs = [];
if (shouldUpdatePhone) {
reqs.push(this.customerService.updatePhone(phoneUpdateRequest))
}
if (shouldUpdateAddress) {
reqs.push(this.customerService.updateAddress(addressUpdateRequest))
}
forkJoin(reqs).subscribe(result => {
// Do whatever you want when they're both done.
});