### 為何防止短時間內重覆執行功能?
現時得多的應用程式都是建立在 web service 上,在使用者介面及服務器之間的溝通,很多都會使用非同步來進行,以提升使用者的體驗。為免使用者可以重覆 submit 表單,在設計使用者介面時需要防止這個情況。例如把 submit disable 以防止使用者重覆按下。
### Delay Call
要處理需要短時間內需要重覆執行的功能,但是又想限制在特定時間後才一次過累積執行 (例如即時提供 suggestion 的 combo box),就可以使用 Delay Call 的方法。
### 實作方法
以下會使用 JS 來作個例子 :
```js
// variable for saving delay call state
let delayId = undefined;
// function want to prevent multiple call in short moment
const requestJson = () => {
// do ajax call
};
// find dom element and add click handler
document.getElementById('myButton').addEventListener('click', evt => {
// check delay call state
if( typeof delayId === 'undefined') {
// assign delay call id (timeout id)
delayId = setTimeout(() => {
// clear delay id
delayId = undefined;
// call function
requestJson();
}, 1000);
}
});
```
以上的代碼可以防止 `requestJson` 在 1 秒在被重覆執行。