2016-10-21 26 views
5

đây là mã của tôi:angular2/RxJS - làm thế nào để thử lại từ bên trong đăng ký()

this._api.getCompanies().subscribe(
    res => this.companies = JSON.parse(res), 
    exception => {if(this._api.responseErrorProcess(exception)) { // in case this retured TRUE then I need to retry() } } 
) 

trong trường hợp một ngoại lệ xảy ra, nó sẽ được gửi đến một hàm trong API sau đó trở về true nếu vấn đề là cố định (ví dụ như làm mới mã thông báo) và nó chỉ cần thử lại sau khi đã sửa số

cố định của tôi và tôi không thể tìm ra cách để thử lại.

Trả lời

6

Trong .getCompanies() cuộc gọi của bạn ngay sau khi .map thêm một .retryWhen:

.retryWhen((errors) => { 
    return errors.scan((errorCount, err) => errorCount + 1, 0) 
       .takeWhile((errorCount) => errorCount < 2); 
}); 

Trong ví dụ này chạy xong quan sát được sau 2 thất bại (errorCount < 2).

+0

Tôi không chắc chắn về cách 'lỗi' trông như thế nào. Tôi nghĩ rằng đó là một loạt các trường hợp ngoại lệ (có thể?). Vì vậy, bạn có thể mở rộng điều kiện 'takeWhile' thành:' errorCount <2 && this._api.responseErrorProcess (lỗi [0]) ' – rinukkusu

+1

đây là những gì tôi sẽ hỏi, tôi sẽ kiểm tra nó cảm ơn bạn rất nhiều :) thực sự theo cách này tôi có thể tập trung xử lý lỗi từ api trực tiếp, thay vì thêm ngoại lệ trong mỗi subsribtion, cảm ơn bạn.! –

+1

Bạn có thể thêm 'console.log (errors)' trước 'return' để xem cấu trúc của nó được cấu trúc như thế nào. – rinukkusu

0

Bạn có ý nghĩa như thế này?

this._api.getCompanies().subscribe(this.updateCompanies.bind(this)) 

updateCompanies(companies, exception) { 
    companies => this.companies = JSON.parse(companies), 
    exception => { 
     if(this._api.responseErrorProcess(exception)) { 
      // in case this retured TRUE then I need to retry() 
      this.updateCompanies(companies, exception) 
     } 
    } 
} 
+0

well Tôi nghĩ rằng có một cách để thử lại() quan sát nguyên bản từ rxjs, nhưng điều này sẽ làm việc quá cảm ơn. –

+1

Hãy nhận biết, ví dụ này có thể có thể bế tắc. – rinukkusu

+0

Tôi sẽ thực hiện một truy cập cảm ơn bạn cho người đứng đầu lên –

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