2017-05-26 42 views
0

我期待做一個昂貴的API調用計劃在將來5分鐘觸發用戶更改參數。如果用戶在10秒鐘後再次更改參數,我不希望在4m50s內撥打電話,在5m內撥打電話,因爲我們基本上沒有實際意義,所以我希望在4m50s內取消呼叫。安排一個JavaScript的未來呼叫,並取消任何未決呼叫

我發現lodash在執行調用前的最短時間內發生了debounce,但它不會取消任何掛起但未執行的調用,因此它可以防止快速調用,但它仍然會執行不必​​要的調用,所以現在完全是這樣。任何干淨的想法做到這一點?

https://lodash.com/docs/4.17.4#debounce

回答

1

debounce文檔:

去抖動功能配備了cancel方法來取消延遲FUNC調用

因此,只要確保你重新調用之前調用method.cancelmethod改變參數:

var debounced = _.debounce(api_func, 5 * 60 * 1000, { trailing: true }); 

,並在觸發器處理程序(其必須具有在其範圍內上述可變debounced訪問):

debounced.cancel(); 
debounced(params); 

可替換地,只使用內置的定時器功能,其中溶液應該平凡是:

var timer; 

,並在觸發:

clearTimeout(timer); 
timer = setTimeout(api_func, 5 * 6 * 1000); 
+0

@ ss2k您使用了上述兩種方法中的哪一種? – Alnitak

+0

我已經對lodash有依賴關係,所以去掉了。 – ss2k