Angular 8 — Typescript — улавливает данные при ошибке из подписки, а не только заголовок

#angular #typescript

#angular #typescript

Вопрос:

Это странный случай. Я подписываюсь на службу, и код выглядит примерно так:

 this.externalService.observableMethod(request).subscribe( 
   response => {
      (...)
   }, error => {
      console.log("Error: ", error)
   }
)
  

Проблема в том, что иногда служба (которая является зависимостью, которую я устанавливаю) отправляет мне данные как ошибку! я знаю, что это не проблема, которую я должен решить здесь, но я не обязан предоставлять услугу, и они должны ее исправить через некоторое время.
Я использую chrome, если я проверяю консоль, я вижу, что она показывает мне заголовок json. Но если я перейду в Network tool и увижу ответ на мой вызов, я увижу, что в json есть данные, которые мне нужны.

Например, это структура json, которую я вижу в Сети:

 {
   "header": 
      {
         "messageCode":"HTTP200",
         "messageDescription":"OK",
         "resultCode":"fail"
       },"data": 
      {
        //the info that i need
      }
}
  

Я подумал: «Хорошо, несмотря на ошибку, я могу использовать информацию в своем коде с помощью чего-то вроде error.data». Но это моя проблема, ошибка не во всем json, а только в заголовке.
В приведенном выше примере кода консоль Chrome показывает мне:

Ошибка: { «messageCode»:»HTTP200″, «messageDescription»: «OK», «resultCode»:»сбой» }

Я не знаю, могу ли я что-то сделать, но я хотел спросить, сталкивался ли кто-нибудь с подобной проблемой. Кто знает

Извините за мой плохой английский.

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

1. Это сложный случай, учитывая, что вы не являетесь владельцем сервиса. Не зная большей части вашего кода, я не могу написать ответ, но я предлагаю вам попытаться решить его с HttpInterceptor помощью . Если вам повезет, вы можете прочитать данные там и добавить их в часть заголовка

2. Спасибо, Поул! к счастью, команда сервиса решила проблему. Но я этого не знал, спасибо за помощь!

Ответ №1:

Как насчет того, чтобы сделать что-то вроде

     this.externalService.observableMethod(request)
    .pipe(map(obj=>{
      return obj.data ? obj.data : obj; // in exception case scenario you will have data in your json.
})). subscribe() // normal response can be processed. 
  

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

1. Спасибо maxkart за ответ. К счастью, команда сервиса решила проблему. Я пробовал этот способ, но все равно не сработал: S