使用RxJS的多角度HTTP请求(彼此不依赖)

时间:2018-08-23 15:37:51

标签: angular rxjs

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()不起作用。

我不确定该如何处理。

1 个答案:

答案 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.
});