Angular 2 Loop of Observables

时间:2017-02-11 02:59:43

标签: angular rxjs

我需要在Angular 2中执行以下操作:

  1. 获取数据(使用Observable)
  2. 验证数据。
  3. 如果有效那么返回数据ELSE转到上面的步骤1(获取数据)
  4. 继续,直到找到有效数据
  5. 在for循环中放置一个observable会立即多次触发observable。这是一个糟糕的方法。什么是一个好方法?

2 个答案:

答案 0 :(得分:2)

Observable有一个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 :(得分: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 ..
      }
   });
}