在我当前的应用程序中,当它是一个空数组或者服务器需要很长时间才能回复时,我似乎无法从observable获得响应。这是我目前的状态:
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();
}
我已尝试使用我在其他地方找到的.timeout
,但这似乎也无效。我正在使用Angular2 rc1。有谁知道如何解决我的问题?感谢。
答案 0 :(得分:1)
您可以使用以下if语句安全地提取数据。
if (res) {
return res.json() || {};
}
答案 1 :(得分:0)
nacho_dh的答案很接近,但res
是一个不太可能为空的对象。在我遇到这个问题的情况下,res对象是一个有效的对象,但_body
属性是&#39;&#39;这就是导致res.json()抛出异常的原因。所以你需要:
.map(res => (<any>res)._body == '' ? {} : res.json())
注意,鉴于您使用Angular 2并因此使用Typescript,您需要将res转换为<any>
,因为_body是私有的,而且Typescript不允许您访问它。
是的,我知道它的hacky,谢谢