Angular 在给定的毫秒后停止发出 api 请求,即使它没有成功
Angular stop making api request after given milliseconds even if it's not succeeded
我正在尝试从后端获取状态,直到满足条件,但我不想通过永远发出请求来使服务器过载 :)。我想在一分钟后停止发出请求。
这是代码
this.statusService
.getStatus(this.itemId).pipe(
repeatWhen(obs => obs.pipe(delay(500))),
filter(data => {
if(data.status === 'done'){
return true;
}else{
return false;
}
}),
take(1)
).subscribe(result =>{
console.log(‘done')
});
我尝试了 timeout() 但它并没有停止发出请求
this.statusService
.getStatus(this.itemId).pipe(
timeout(60000),
repeatWhen(obs => obs.pipe(delay(500))),
filter(data => {
if(data.status === 'done'){
return true;
}else{
return false;
}
}),
take(1)
).subscribe(result =>{
console.log(‘done')
});
更新:
一个简单的解决方案可以是:
const apiCall$ = this.statusService.getStatus(this.itemId)
.pipe(
delay(1000),
repeat(),
filter(data => (data.status === 'done'))
);
const timeout$ = of(false).pipe(delay(3000));
// The observable to emit first is used
race([apiCall$, timeout$])
.pipe(take(1))
.subscribe(result => {
console.log(result);
});
我正在尝试从后端获取状态,直到满足条件,但我不想通过永远发出请求来使服务器过载 :)。我想在一分钟后停止发出请求。 这是代码
this.statusService
.getStatus(this.itemId).pipe(
repeatWhen(obs => obs.pipe(delay(500))),
filter(data => {
if(data.status === 'done'){
return true;
}else{
return false;
}
}),
take(1)
).subscribe(result =>{
console.log(‘done')
});
我尝试了 timeout() 但它并没有停止发出请求
this.statusService
.getStatus(this.itemId).pipe(
timeout(60000),
repeatWhen(obs => obs.pipe(delay(500))),
filter(data => {
if(data.status === 'done'){
return true;
}else{
return false;
}
}),
take(1)
).subscribe(result =>{
console.log(‘done')
});
更新:
一个简单的解决方案可以是:
const apiCall$ = this.statusService.getStatus(this.itemId)
.pipe(
delay(1000),
repeat(),
filter(data => (data.status === 'done'))
);
const timeout$ = of(false).pipe(delay(3000));
// The observable to emit first is used
race([apiCall$, timeout$])
.pipe(take(1))
.subscribe(result => {
console.log(result);
});