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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Angular 在typescript中添加webservice调用之间的延迟_Angular_Typescript_Rxjs_Polling - Fatal编程技术网

Angular 在typescript中添加webservice调用之间的延迟

Angular 在typescript中添加webservice调用之间的延迟,angular,typescript,rxjs,polling,Angular,Typescript,Rxjs,Polling,我正在开发一个简单的web应用程序,将一个大文件发送到服务器进行处理。处理可能需要相当长的时间,超过我无法调整的服务器超时时间,因此我决定设计两个服务——一个向服务器发送数据,另一个不断检查处理结果。但持续的检查似乎占用了太多的资源,浏览器的运行速度开始减慢。代码如下: try { this.processService.processData(this.byteArray); //data sent for a processing const p

我正在开发一个简单的web应用程序,将一个大文件发送到服务器进行处理。处理可能需要相当长的时间,超过我无法调整的服务器超时时间,因此我决定设计两个服务——一个向服务器发送数据,另一个不断检查处理结果。但持续的检查似乎占用了太多的资源,浏览器的运行速度开始减慢。代码如下:

      try {
        this.processService.processData(this.byteArray); //data sent for a processing

        const processingResult: ProcessResult = new ProcessResult();
        processingResult.traces = []

        do {
          this.processService.getResult().then(result => processingResult.traces = result?.traces);
        } while (processingResult.traces.length === 0);

        this.traces = processingResult.traces;
      } catch (error) {
        console.error(error);
      }
    }
  }
在TypeScript中,在ws调用之间添加某种延迟的最佳实践是什么?谢谢

delay(ms: number) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
将上述方法用作异步函数调用

async searchSomething() {
    // webservice call 1
    await this.delay(1000);
    // webservice call 1 
}

我建议将
interval
skipWhile
take
结合使用

// SERVER

let ready = false;

function veryLongServerRequest(): void {
  timer(10000).subscribe(
    () => ready = true,
  );
}

function isServerReady(): Observable<boolean> {
  return of(ready);
}

// CLIENT

veryLongServerRequest();

interval(500).pipe(
  tap(i => console.log('Polling try ' + i)),
  switchMap(() => isServerReady()),
  skipWhile(b => !b),
  take(1),
).subscribe(() => console.log('FINISHED!'));
//服务器
让ready=false;
函数veryLongServerRequest():void{
计时器(10000)。订阅(
()=>ready=true,
);
}
函数isServerReady():可观察{
返回(准备就绪);
}
//客户
veryLongServerRequest();
间隔(500)。管道(
轻触(i=>console.log('pollingtry'+i)),
switchMap(()=>isServerReady()),
滑雪时(b=>!b),
以(1)为例,
).subscribe(()=>console.log('FINISHED!'));
见工作组闪电战:

编辑:您可以简化
跳过
+
先将
转到


请参阅working Stackblitz:

您搜索过“RxJS轮询”吗?有很多选择。如果你使用的是观测值。检查:非常感谢,女士!工作得很有魅力。请提出以下建议:如果isServerReady()方法提供了一些文本反馈,而不仅仅是布尔结果,我应该如何修改此代码以使用interval()块之后的返回值呢?f说明:changing.subscribe(()=>console.log('FINISHED!'));订阅(result=>console.log(result));