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

Javascript 如何将数据从tap()传递到takewhile(),javascript,angular,rxjs,Javascript,Angular,Rxjs,我想构建一个函数来检查插入的数据是否有效 下面是我的代码,它将有一个map和一个take函数来确保checking函数不会运行超过10次 我想做的是运行chk_data_status,通过使用tap返回状态,并将该状态返回给takeWhile,这样,如果状态未处于状态处理中,整个函数将停止 但问题是takeWhile函数从map和take函数获取count的值,而不是从tap获取res.status tap运算符不返回值,而是传递它接收到的任何值,因此您可以得到映射中的值。只需将tap替换为ma

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

下面是我的代码,它将有一个map和一个take函数来确保checking函数不会运行超过10次

我想做的是运行chk_data_status,通过使用tap返回状态,并将该状态返回给takeWhile,这样,如果状态未处于状态处理中,整个函数将停止

但问题是takeWhile函数从map和take函数获取count的值,而不是从tap获取res.status


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

另外,与其使用async和wait,不如按如下方式通过管道发送请求

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\u data\u statusid返回一个可观察值。

如果顺序很重要,您可能需要选择concatMap
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();