2017-02-11 83 views
0

的角2循環我需要做在角2以下:觀測量

  1. (使用可觀察)
  2. 驗證數據獲取數據。
  3. IF有效然後返回上述數據,否則,轉至步驟1(讀取數據)
  4. 繼續,直到有效數據發現

立即把一個可觀察在for循環中的火災的可觀察多次。這是一個不好的方法。什麼是好方法?

回答

2

觀測量有retry方法,您可以通過只要拋出一個錯誤的數據使用的是無效的:

let src: Observable<any>;// the source Observable 
src.map(data => { 
    if (!validate(data)) { 
    throw "Invalid data"; 
    } 
    return data; 
}) 
.retry() // you can limit the number of retries 
.subscribe(data => { 
    // Do something with the data 
}); 

如果您需要檢查錯誤,則可以使用retryWhen

let src: Observable<any>;// the source Observable 
src.map(data => { 
    if (!validate(data)) { 
    throw "Invalid data"; 
    } 
    return data; 
}) 
.retryWhen(errors => errors.map(err => { 
    if (err != "Invalid data") { 
    throw err; 
    } 
}) 
.subscribe(data => { 
    // Do something with the data 
}); 
1

使用遞歸函數調用。

取回功能:

public getData(): Observable<any> {} 

用法:

public refresh() { 
    this.yourService.getData().subscribe(data => { 
     // validate data ! 
     if (dataValid(data) { 
     // do something cool here .. ! 
     } 
     else { 
     this.refresh(); // do it again .. 
     } 
    }); 
}