【发布时间】:2021-11-08 10:29:00
【问题描述】:
我有一个 Launch 方法,它接受一些参数并启动一个引擎。 当引擎启动时,它会返回实例名称。 使用此实例名称,我想定期查询另一个服务,例如每 2 秒以了解状态是否更改为“成功”或“失败” 我在第一个订阅中做了一个 do while 循环,但它没有按预期工作。
instanceStatus: string = "Initialized";
instanceName:string = "InstanceName";
Launch(sessionId: string, projectName: string, f: string[]) {
this.service.Launch(sessionId, projectName, this.f)
.pipe(first())
.subscribe(
instanceName => {
localStorage.setItem('instanceName', instanceName);
this.instanceName = instanceName;
setTimeout(() => {
do {
this.service.getEngineStatus(this.instanceName)
.pipe(first())
.subscribe(
status => {
this.instanceStatus = status;
console.log(status);
console.log(this.instanceStatus);
this.loadingService.showSpinner({ text: 'Modeling is running...' });
if (this.instanceStatus === "Succeeded") {
this.messageService.add({ severity: Severity.Success, summary: 'Fault modeling completed', detail: 'Via MessageService' });
this.messageService.clear();
}
}
);
} while (this.instanceStatus !== "Succeeded")
}, 2000);
}
);
}
getEngineStatus(instanceName:string): Observable<string> {
this.serviceUrl = URL + `?instance=` + instanceName;
return this._http.get<string>(this.serviceUrl);
}
【问题讨论】:
-
这能回答你的问题吗? How To Do Polling with Angular 2 Observables
-
谢谢利亚姆,但它已经过时了。 'interval' 属性不再存在于 Observable 上。
-
它确实存在,只是创建方式不同,因为更高版本的 rxjs learnrxjs.io/learn-rxjs/operators/creation/interval
标签: angular typescript rxjs