2016-08-15 21 views
6

私の現在のアプリケーションでは、空の配列であるか、サーバが応答するのに時間がかかりすぎると、オブザーバブルからの応答を得ることができません。私はどこか別の場所に見つかった.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()が例外をスローする原因です。だから、必要があります。

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

注意を、あなたは_bodyがプライベートで、活字体はあなたがそれにアクセスできないので、<any>にRESをキャストする必要があります2角度ので、活字体で自分の作業与えられました。

はい私はそのハッキーを知っています、ありがとう

関連する問題