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

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

我要尝试执行的操作是运行chk_data_status()以使用tap()返回状态并将该状态返回到takeWhile(),以便如果状态不在“正在处理”状态,则整个功能将停止。

但是问题是takeWhile()函数从map()take()函数获取计数值,而不是res.statustap()

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/

10-12 16:19