如何将数据从tap()传递到takewhile()

时间:2019-06-20 04:40:52

标签: javascript angular rxjs

我想构建一个函数来检查插入的数据是否有效。

下面是我的代码,它将具有一个map()和一个take()函数,以确保检查功能不会再运行10次。

我要执行的操作是想运行chk_data_status()以使用tap()来获取状态,并将该状态返回给takeWhile(),这样,如果状态变为,则整个功能将停止处于“处理中”状态。

但是问题是takeWhile()函数从map()take()函数获取计数值,而不是res.status的{​​{1}}。

tap()

1 个答案:

答案 0 :(得分:3)

tap运算符不返回值,而是传递所接收的任何值,因此您可以获取映射中的内容。只需将tap替换为map即可,您的takeWhile()将获得状态。

也不要使用异步和等待,而是为什么不按如下所示通过管道发送请求,

const count = 10
timer(5000, 1000)
 .pipe(
   map(i => count- i),
   take(count + 1),
   mergeMap(_ => this.chk_data_status(id).pipe(map( res =>  res.status))),
   takeWhile((status: any) => {
     console.log(status);
     return status!= 'Processing';
  }),
  finalize(() => doSomething())
).subscribe();

但是请确保this.chk_data_status(id)返回一个可观察值。