Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 无递归的RXJS轮询_Typescript_Rxjs - Fatal编程技术网

Typescript 无递归的RXJS轮询

Typescript 无递归的RXJS轮询,typescript,rxjs,Typescript,Rxjs,服务器正在同时处理多个请求。调用服务以检查每个请求的状态。服务接受id列表,并给出每个id的状态,如下所示 { id: number, status: number}; Status 1 is pending and 2 is complete 需要轮询所有挂起的请求ID,直到所有请求完成 我有以下递归解决方案,但需要一个简洁的RXJS解决方案 poll(requestIds: Array<number>): void { if (requestIds.length &g

服务器正在同时处理多个请求。调用服务以检查每个请求的状态。服务接受id列表,并给出每个id的状态,如下所示

{ id: number, status: number}; Status 1 is pending and 2 is complete
需要轮询所有挂起的请求ID,直到所有请求完成

我有以下递归解决方案,但需要一个简洁的RXJS解决方案

 poll(requestIds: Array<number>): void {
    if (requestIds.length > 0) {
        callService(requestIds).subscribe((response) => {
            const pending = response.reduce((result, request) => {
                if (request.status === 1) { result.push(request.id); }
            }, []);
            setTimeout(() => poll(pending), 5000);

        });
    }
}
poll(requestid:Array):无效{
如果(requestIds.length>0){
callService(RequestId).subscribe((响应)=>{
const pending=response.reduce((结果、请求)=>{
if(request.status==1){result.push(request.id);}
}, []);
setTimeout(()=>poll(待定),5000);
});
}
}

在上面的例子中没有提到的是clearTimeout和订阅列表,当轮询停止时,该列表将被清除。我知道这可以通过repeatWhen和takeWhile实现,这是一个rxjs流,可以实现递归:

callService(ids).pipe(
  expand(reqs => reqs.length === 0
    ? empty()
    : callService(
        reqs.filter(req => req.status === 1).map(req => req.id)
      ).pipe(delay(1000))
  )
).subscribe();

这里您可以看到一个演示:

您可以使用
expand
操作符:它仍然是递归调用。不,它是迭代调用。概念上可能是递归的,但实现将是迭代的。您是否要求使用
repeatWhen
takeWhen
来解决问题?到目前为止你有什么?上面评论中的博文链接不再有效。文章的规范链接是: