#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