簡體   English   中英

Angular 8:如何使用 Observable 的間隔立即發送 http 請求

[英]Angular 8: How to send the http request immediately using interval of Observable

我具有將請求從前端連續發送到后端的功能。 所以我添加了下面給出的代碼。

我想以第一個請求應該立即執行 go 的方式實現,然后在兩分鍾后執行。

但是使用下面的代碼並根據間隔的定義,它將在兩分鍾后發送第一個請求。

this.getData = Observable.interval(2 * 60 * 1000)
      .pipe(flatMap(() => this.service.getData(b, b, b, b, b, b))).subscribe();

我不想通過首先添加請求然后添加上面的代碼來重復代碼,任何其他方式來完成它。

解決它的最簡單的方法是使用timer運算符而不是interval運算符,初始延遲為 0 秒。

this.getData = Observable.timer(0, 2 * 60 * 1000)
      .pipe(flatMap(() => this.service.getData(b, b, b, b, b, b))).subscribe();

更新:使用repeatdelayWhen運算符

上述解決方案對於簡單的用例很有用。 但是,如果您需要動態控制每個請求之間的延遲並根據某些條件完成輪詢,則可以使用repeatdelayWhentakeWhile運算符。

let condition = 0;
this.service.getData(b, b, b, b, b, b).pipe(
  take(1),
  delayWhen(_ => condition === 0 ? timer(0) : timer(2 * 60 * 1000)),   // set poll delay
  repeat(),
  takeWhile(_ => condition < 5),        // stop polling when `condition` is 5
  switchMap(response => {
    // do something and update the `condition`
    condition++;
    return of(response);
  })
).subscribe(
  res => console.log(res),
  err => console.log(err),
  () => console.log('complete')
);

您還可以使用repeatWhen運算符對何時重復請求進行更精細的控制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM