如何解决在打字稿中的Web服务调用之间添加延迟
我正在开发一个简单的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
}
,
我建议将resource "google_monitoring_metric_descriptor" "p95_latency" {
description = ""
display_name = ""
type = "custom.googleapis.com/http/server/requests/p95"
metric_kind = "GAUGE"
value_type = "DOUBLE"
labels {
key = "status"
}
labels {
key = "uri"
}
labels {
key = "exception"
}
labels {
key = "method"
}
labels {
key = "outcome"
}
}
与interval
和skipWhile
结合使用。
take
请参见工作中的Stackblitz:https://stackblitz.com/edit/rxjs-fqbwon?file=index.ts
编辑:您可以将// 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!'));
+ skipWhile
简化为take
请参见工作中的Stackblitz:https://stackblitz.com/edit/rxjs-tc2ztd?file=index.ts
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。