2016-08-15 2 views
6

내 현재 응용 프로그램에서 그것은 빈 배열 또는 서버가 응답하는 데 너무 오래 걸릴 때 observable 응답을 얻을 보일 수 없습니다. 내가 다른 곳에서 발견 된 .timeout를 사용하여 시도했지만 그 중 하나가 작동하지 않는 것Angular2 빈 응답 처리

getIncomingData():Observable<any[]> { 
    console.log("GetIncomingData"); 
    return this.http.get('http://mylink/data') 
     .map(data => this.extractIncomingData(data)) 
     .catch(this.handleError); 
} 

private extractIncomingData(res:Response):any[] { 
    if (res.status < 200 || res.status >= 300) { 
     throw new Error('Bad respons status: ' + res.status); 
    } 
    console.log(res.json()); 
    return <any>res.json(); 
} 

: 여기에 내 현재 상태입니다. Angular2 rc1을 사용하고 있습니다. 누구든지 내 문제를 해결하는 방법을 알고 있습니까? 감사.

답변

1

데이터를 안전하게 추출하기 위해 다음 if 문을 사용할 수 있습니다.

if (res) { 
     return res.json() || {}; 
    } 
0

nacho_dh의 대답은 가까이 있지만 res는 null 가능성이있는 객체입니다. 이 문제가있는 경우 res 객체가 유효한 객체이지만 _body 속성이 ''이므로 res.json()이 예외를 throw합니다. 그래서 당신이 필요합니다

.map(res => (<any>res)._body == '' ? {} : res.json()) 

참고, 당신은 _body 개인과 타이프 당신이 그것을 액세스 할 수 없기 때문에 <any>에 고해상도를 캐스팅해야합니다 2 각도 때문에 타이프 라이터와 함께 작업 주어진다.

예 그 해킹을 알고 있습니다. 감사합니다.