#angular #angular2-services
#angular #angular2-сервисы
Вопрос:
У меня возникла проблема с возвратом объекта в моем Http-сервисе в catch моему компоненту:
Вот мой код в моем сервисе:
login(username,password){
let headers = new Headers();
headers.append('Content-Type','application/json');
return this.http.post(this.configEnvironment.url() "oauth/access_token",
JSON.stringify(
{
username: username,
password: password,
grant_type: "password",
client_id: "xxxx",
client_secret: "xxxxx"
}
),
{ headers }
)
.map(res => res.json())
.catch((err:Response) => {
let details = err.json();
return Observable.throw(details);
});
}
Вот мой код в моем компоненте:
this.loginService.login(this.model.username,this.model.password)
.subscribe(
data => console.log(data),
error => {
// var details = error.json();
console.log(error);
},
() => console.log("Finished")
);
Это работает нормально, когда я просто возвращаю ошибку json следующим образом:
let details = err.json();
return Observable.throw(details);
Но когда я пытаюсь добавить код состояния HTTP-ответа следующим образом:
return { status: err.status, error: Observable.throw(details) }
Это дает мне ошибку:
«Аргумент типа ‘(err: Response) => {status: number; error: ErrorObservable; }’ не может быть присвоен параметру типа ‘(err: any, перехвачено: Observable) => ObservableInput’. Тип ‘{ status: number; ошибка: ErrorObservable; }’ не может быть присвоен типу ‘ObservableInput’. Тип ‘{status: number; error: ErrorObservable; }’ не может быть присвоен типу ‘ArrayLike<{}>’. Свойство ‘length’ отсутствует в типе ‘{ status: number; ошибка: ErrorObservable; }’.»
Моя цель — просто включить код ответа http в возврат catch.
Ответ №1:
попробуйте следующий код,
.catch((err:Response) => {
let details = {detail:err.json(),status: err.status};
return Observable.throw(details);
});
Комментарии:
1. Добро пожаловать. Просто хочу сообщить вам, что вчера вы задали один вопрос, и я ответил. Ответ был правильным, и вы сразу же удалили его. Никогда не делайте этого, поскольку это может помочь другим пользователям разобраться в проблеме и решении, если они столкнутся с такой же ситуацией.
2. Ой, извините, Чувак, и да, никогда больше этого не сделаю. Еще раз спасибо!
Ответ №2:
просто попробуйте это
return [{ status: err.status, error: err.json() }]
это должно сработать
или также вы можете просто отправить весь err
объект в блок catch и во время подписки проверить код состояния, который также работает.
return err
и во время использования подписки
err.status
Комментарии:
1. его okii, рад слышать, что вы получили свой ответ, вы можете попробовать мой тоже в качестве альтернативы 🙂