2016-08-15 26 views
6

Trong ứng dụng hiện tại của tôi, tôi dường như không nhận được phản hồi từ quan sát khi đó là một mảng trống hoặc khi máy chủ trả lời quá lâu. Đây là trạng thái hiện tại của tôi:Angular2 xử lý đáp ứng rỗng

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(); 
} 

Tôi đã thử sử dụng .timeout Tôi tìm thấy một nơi khác nhưng điều đó dường như không hoạt động. Tôi đang sử dụng Angular2 rc1. Có ai biết cách giải quyết vấn đề của tôi không? Cảm ơn.

Trả lời

1

Bạn có thể sử dụng câu lệnh if sau đây để trích xuất dữ liệu một cách an toàn.

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

Câu trả lời của nacho_dh đã đóng nhưng res là một đối tượng không chắc chắn là rỗng. Trong trường hợp tôi gặp vấn đề này đối tượng res là một đối tượng hợp lệ nhưng thuộc tính _body là '', đây là nguyên nhân gây ra res.json() để ném một ngoại lệ. Vì vậy, bạn cần:

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

Lưu ý, do làm việc của bạn với góc 2 và do đó nguyên cảo bạn sẽ cần phải cast res để <any> vì _body là tư nhân và nguyên cảo sẽ không cho phép bạn truy cập vào nó.

vâng tôi biết tin tặc của nó, cảm ơn

Các vấn đề liên quan