Angular2空响应处理

时间:2016-08-15 07:28:24

标签: angular

在我当前的应用程序中,当它是一个空数组或者服务器需要很长时间才能回复时,我似乎无法从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。有谁知道如何解决我的问题?感谢。

2 个答案:

答案 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,谢谢