首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >观测角2环

观测角2环
EN

Stack Overflow用户
提问于 2017-02-11 02:59:42
回答 2查看 1.4K关注 0票数 0

我需要在角度2中做以下操作:

  1. 获取数据(使用可观察的)
  2. 验证数据。
  3. 如果有效,则将其他数据返回到上面的step1 (获取数据)
  4. 继续到找到有效数据为止

将一个可观测的放在for循环中立即触发可观测的多次。这是个糟糕的方法。什么是好方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-11 13:32:46

可观察到有一个重试方法,只要数据无效,就可以通过抛出错误来使用该方法:

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
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
});
票数 2
EN

Stack Overflow用户

发布于 2017-02-11 07:52:46

使用递归函数调用。

取取功能:

代码语言:javascript
代码运行次数:0
运行
复制
public getData(): Observable<any> {}

用法:

代码语言:javascript
代码运行次数:0
运行
复制
public refresh() {
   this.yourService.getData().subscribe(data => {
      // validate data !
      if (dataValid(data) {
         // do something cool here .. !
      }
      else {
         this.refresh(); // do it again ..
      }
   });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42171690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档