我正在尝试创建一个处理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
代码则转到{{1}状态并返回响应。
但是当我在组件中使用它时,无论是否正常,它都会进入then
状态。
then
是否有我遗漏的东西,我应该在服务上扔东西以便代码转到错误开始,因为我得到addingContact() {
this.contactsService
.addContact(this.user)
.then(
(contactx) => { console.log('THEN = ' + JSON.stringify(contactx)); },
(err) => { console.log('CATCH = ' + JSON.stringify(err)); }
);
}
状态代码?
先谢谢你,丹尼尔!
答案 0 :(得分:6)
你吞下了catch中的错误,你仍然可以有一个catch子句来转换错误,但你需要从它返回一个被拒绝的Promise。这样的事情:
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));
答案 1 :(得分:2)
我是否应该在服务上抛出一些东西,以便在我获得400+状态代码时代码进入错误开始?
是的,因为现在,您的catch
服务声明正在吞噬错误。
您也可以在那里删除catch
语句,但是您必须记住在使用addContact
的每段代码中添加一条语句。