Обработка нескольких типов ответов для вложенных вызовов api с различными ответами

#angular #typescript #observable

#угловой #машинописный текст #наблюдаемый

Вопрос:

У меня есть два вызова api, которые возвращают разные ответы. Эти ответы строго типизированы в TestData1Res и TestData2Res. Как мне указать, что ответ может быть одним из них, а затем обработать свойство

`TestData1Res{ Тестовые данные: строка }

TestData2Res{ данные: строка }

 this.getData1().pipe(catchError(error =gt; this.getData2()))  .subscribe(  (res: TestData1Res|TestData2Res) =gt; {  if (res.testData) { //error 'Property 'testData' does not exist on type 'TestData1Res | TestData2Res'  }  if (res.data) { //error 'Property 'data' does not exist on type 'TestData1Res | TestData2Res'  }  }  );`  

Комментарии:

1. вы хотите звонить getData2() только после того, как получите сообщение об ошибке при вызове getData1() ?

2. вы не должны обрабатывать ошибки таким образом. вы должны вернуть пустое наблюдаемое в случае ошибки, а затем использовать switchmap для вызова службы ur 2.

Ответ №1:

Может быть полезно использовать динамический тип данных

 this.getData1().pipe(catchError(error =gt; this.getData2()))  .subscribe(  (res: any) =gt; {  if (res["testData"]) {   }  if (res["data"]) {   }  }  );  

Ответ №2:

если вы хотите вызвать один вызов API после получения ответа от другого

 this.getData1().subscribe(data =gt; {  // success getdata1  this.getData2().subscribe(data =gt; {  //success getdata2  }, err =gt; {  // getdata2 error  })  }, err =gt; {  //getdata1 error })  

если вы хотите вызвать оба сразу, вы можете использовать forkjoin из rxjs

 forkjoin([this.getData1(), this.getData2()]).subscribe(result =gt; {  // result[0] - getdata1 result  // result[1] - getdata2 result }, err =gt; {  // err if something goes wrong })