TLDR; 我想使用debounceTime來執行函數只有300毫秒已經過去,沒有被調用。與此同時,我也希望能夠每1分鐘觸發一次該功能。如果過程需要很長時間。否則,該功能只會在過程結束時觸發。如何使用debounceTime但在某段時間後仍然會觸發該功能?
基本上,我們的系統有一個很長的過程,會向客戶端發出大量的SignalR更新。當我在客戶端接收到服務器命令時,我會向服務器發送2個額外的HTTP請求以獲取一些信息。所以只要發送給我的服務器更新,它就會重新啓動服務器。
我使用
debounceTime
防止發送太多的請求回 服務器如果兩個命令之間的時間是300ms以內。但有一個 用例,其中服務器不斷向客戶端發送更新,例如1小時, 。這意味着客戶端將在1小時和 300毫秒處觸發getItemCount。
export class LeftNavigationComponent implements OnInit, OnDestroy {
typeACount: number = 0;
typeBCount: number = 0;
constructor(
private itemService: service.ItemService,
private signalR: service.SignalRService) { }
ngOnInit(): void {
this.subscriptions = [
this.signalR.itemCreated.debounceTime(300).subscribe(item => this.onUpdatingData())]
}
onUpdatingData() {
Promise.all([
this.itemService.getItemCount(APP_SETTING.TYPE_A),
this.itemService.getItemCount(APP_SETTING.TYPE_B)])
.then(response => this.gettingCountDone(response))
}
gettingCountDone(response) {
this.typeACount = <any>response[0];
this.typeBCount = <any>response[1];
}
}
我還是想debounceTime
防止發送太多的請求到服務器。但它應該足夠聰明,可以在接收到第一次更新後的每一分鐘內自動觸發。有沒有人有過用例?
您是否可以澄清_會在接收到**第一次更新後的每個例如1分鐘後自動觸發** _什麼是「首次更新」。如果您以大理石圖的形式展示了所需行爲的草圖,它也有助於理解您的問題。順便說一句,這是一個很好的工作謎! –