2016-08-15 47 views
6

在我当前的应用程序中,当它是一个空数组或当服务器回复时间太长时,我无法从observable获得响应。这是我目前的状态: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(); 
} 

我已经使用.timeout我发现别的地方尝试过,但似乎并没有任何工作。我正在使用Angular2 rc1。有谁知道如何解决我的问题?谢谢。

回答

1

您可以使用以下if语句安全地提取数据。

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

nacho_dh的回答很接近,但res是一个对象,它不太可能是零。在我遇到这个问题的情况下,res对象是一个有效的对象,但_body属性为'',这是导致res.json()抛出异常的原因。因此,你需要:

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

注意,给出角2,因此打字稿你的工作,你需要投资源来<any>因为_body是私人的,打字稿不会让你访问它。

是我知道它的哈克,谢谢