2016-02-27 26 views
12

Tôi có đoạn code sau trong dịch vụ của tôiNhận thông báo lỗi từ góc 2 http

myService.ts

makeHttpGetRequest(url){ 

     return Observable.interval(config.SUPERVISOR_REFRESH_INTERVAL * 1000) 
      .switchMap(() => this.http.get(url)) 
      .map(res => res.json()) 
      .timeout(config.REQUEST_TIMEOUT * 1000, new Error('Time out occurred')) 

    } 

Trong tập tin thành phần của tôi,

myComponent.ts

ngOnInit(){ 
     this._myService.makeHttpGetRequest(myurl) 
      .subscribe(
       data => { 
        this.supervisorServers = data; 
        } 

       }, 
       error => { 
        this.error = true; 
        console.log(error); //gives an object at this point 
        this.showError(error); 
       } 
      ); 
    } 

Tôi muốn in thông báo lỗi trong trường hợp ví dụ: Url Invailid. Khi tôi in lỗi, tôi nhận được một đối tượng (có thể là đối tượng response) như sau:

Object { _body: error, status: 200, statusText: "Ok", headers: Object, type: 3, url: null } 

Nếu tôi mở này, tôi không thể tìm thấy các thông báo lỗi. Có cách nào tốt hơn để nhận thông báo lỗi trước không?

Trả lời

9

Lỗi được chứa trong nội dung phản hồi ngay cả trong trường hợp này. Xem các lỗi xử lý sự kiện onerror chức năng:

Bạn có thể truy cập nó bằng cách sử dụng phương pháp json trên phản ứng:

error => { 
    this.error = true; 
    console.log(error.json()); //gives the object object 
    this.showError(error.json()); 
} 

Sửa

tôi điều tra một nhiều hơn nữa vấn đề này. Trong thực tế, bạn không thể có thông điệp chính xác. Ý tôi là số net::ERR_NAME_NOT_RESOLVED. XHR không cung cấp. Điều đó nói rằng, bạn có thể thấy rằng status của XHR là 0. Điều này có thể là một gợi ý rằng có một vấn đề yêu cầu khi gửi yêu cầu (nó không thực sự được gửi).

error => { 
    (...) 
    var err = error.json(); 
    var status = err.currentTarget.status; 
    (...) 
} 

Xem câu hỏi này:

+0

Cảm ơn bạn đã trả lời. Tôi có thể truy cập nó. Nhưng ví dụ: khi tôi có một url không hợp lệ, tôi không thể nhìn thấy thông báo lỗi trong nội dung phản hồi. Có thể nhận được thông báo lỗi hiển thị trên giao diện người dùng không? – user3288346

+0

Bạn được chào đón! Trong thực tế, bạn không thể có thông báo chính xác vì nó không thể truy cập trong đối tượng XHR. Điều đó nói rằng, bạn có thể dựa vào trường 'status' của đối tượng này ... Tôi đã cập nhật câu trả lời của mình. –

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