我正在嘗試從后端獲取狀態直到滿足條件,但我不想通過永遠發出請求來使服務器過載:)。我想在一分鐘后停止發出請求。這是代碼
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')
});
uj5u.com熱心網友回復:
更新:
一種簡單的解決方案可以是:
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);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/349592.html
標籤:javascript 有角的 打字稿 rxjs
上一篇:Angular-具有嵌套FormGroup的組件中的表單控制元件沒有值訪問器
下一篇:在Angularrxjs中訂閱
