我想构建一个函数来检查插入的数据是否有效。
下面是我的代码,它将具有一个map()
和take()
函数,以确保检查功能不会运行超过10次。
我要尝试执行的操作是运行chk_data_status()
以使用tap()
返回状态并将该状态返回到takeWhile()
,以便如果状态不在“正在处理”状态,则整个功能将停止。
但是问题是takeWhile()
函数从map()
和take()
函数获取计数值,而不是res.status
的tap()
。
const count = 10
timer(5000, 1000)
.pipe(
map(i => count- i),
take(count + 1),
tap(async () => {
let res: any = await this.chk_data_status(id); // return as a Promise
console.log(res.status);
return res.status;
}),
takeWhile((status: any) => {
console.log(status);
return status!= 'Processing';
}),
finalize(() => doSomething())
).subscribe();
最佳答案
tap运算符不返回任何值,而是传递其接收到的任何值,因此您将获得地图中的内容。只需将map替换为tap,您的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)
返回一个可观察值。关于javascript - 如何将数据从tap()传递到takewhile(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56679094/