我想构建一个函数来检查插入的数据是否有效。
下面是我的代码,它将具有一个map()
和一个take()
函数,以确保检查功能不会再运行10次。
我要执行的操作是想运行chk_data_status()
以使用tap()
来获取状态,并将该状态返回给takeWhile()
,这样,如果状态变为,则整个功能将停止处于“处理中”状态。
但是问题是takeWhile()
函数从map()
和take()
函数获取计数值,而不是res.status
的{{1}}。
tap()
答案 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)
返回一个可观察值。