2017-05-01 7 views
4

연락처 2에서 연락처를 처리하는 서비스를 만들려고합니다. 이것은 내가 지금까지 얻은 것입니다. 내가 응답에 400+ 상태 코드를 얻을 경우각도 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()); 
    } 
} 

지금은 서비스가 잘 작동 그것이 then 상태로 전환 200 코드 그리고 응답을 반환하는 경우, 코드는 catch 응시로 이동합니다.

하지만 컴포넌트 내부에서 사용할 때 respone이 괜찮은지 여부와 상관없이 then 상태가됩니다. 코드가 나는 400+ 상태 코드를 얻을 수 넣다 시작 오류로 이동 있도록

addingContact() { 
    this.contactsService 
    .addContact(this.user) 
    .then(
     (contactx) => { console.log('THEN = ' + JSON.stringify(contactx)); }, 
     (err) => { console.log('CATCH = ' + JSON.stringify(err)); } 
    ); 
} 

내가 서비스에 뭔가를 던져해야 내가 부족 뭔가가 있나요?

미리 감사드립니다. Daniel!

+0

실제로 위의 코드는 내 문제를 해결했습니다. :). 고맙습니다! – Devner

답변

5

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)); 
+0

.catch (오류 = > Promise.reject (error.json())) 그리고 그것이 작동하도록 기대대로 정확히 작동합니다, 정말 고마워요! –

2

서비스에 뭔가를 던져서 코드가 400+ 상태 코드를 얻는 경우 오류가 발생하도록해야합니까?

예, 지금은 서비스의 catch 문이 오류를 삼키는 중입니다.

또한 거기 catch 문을 제거 할 수 있지만 addContact를 사용하는 코드의 모든 부분에 하나를 추가하는 것을 기억해야합니다.

+0

고마워요. 지금 내가 뭘 잘못했는지 이해합니다. 나는 여전히 catch 상태에서도 문제를 해결합니다. 왜냐하면 Promise.reject를 사용하여 구성 요소에서 오류를 반환하지 않는 이유가 무엇입니까? –