Угловой 2 обещают скинуть ошибку
Я пытаюсь создать сервис, который обрабатывает контакты в Angular 2. Это то, что я получил до сих пор.
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class ContactsService {
constructor(private http: Http) { }
addContact(contact): Promise<any> {
return this.http
.post('http://localhost:8000/contacts', contact)
.toPromise()
.then(response => response.json())
.catch(error => error.json());
}
}
Теперь служба работает нормально, если я получаю код состояния 400+
в ответе, код переходит в состояние catch
, Если это код 200
, он переходит в состояние then
и возвращает ответ.
Но когда я использую его внутри компонента, он переходит в состояние then
независимо от того, является ли респон нормальным или нет.
addingContact() {
this.contactsService
.addContact(this.user)
.then(
(contactx) => { console.log('THEN = ' + JSON.stringify(contactx)); },
(err) => { console.log('CATCH = ' + JSON.stringify(err)); }
);
}
Есть ли что-то, что я упускаю, должен ли я бросить что-то на службу Итак, код переходит в начало ошибки, когда я получаю код состояния 400+
?
Заранее благодарю тебя, Дэниел!
2 ответа:
Вы проглатываете ошибку в catch, у вас все еще может быть предложение catch для преобразования ошибки, но вам нужно вернуть отклоненное обещание из него. Что-то вроде этого:
let httpPromiseMock = new Promise((resolve, reject)=> { reject('400 error'); }); httpPromiseMock .then(x=> {console.log(x); return x*2;}) .catch(x=> Promise.reject(`my error is ${x}`)) .then(x=>console.log('good',x), err=>console.log('bad', err));
Должен ли я бросить что-то на сервис, чтобы код шел в начало ошибки в случае, если я получу код состояния 400+?
Да, потому что прямо сейчас ваше
catch
заявление службы проглатывает ошибку.Вы также можете избавиться от оператора
catch
, но вам придется не забыть добавить его в каждый фрагмент кода, который используетaddContact
.