3 回答

TA貢獻1829條經驗 獲得超13個贊
您需要在函數timer 外部聲明。否則,您將在每次函數調用時獲得一個全新的變量。
var timer;
function endAndStartTimer() {
window.clearTimeout(timer);
//var millisecBeforeRedirect = 10000;
timer = window.setTimeout(function(){alert('Hello!');},10000);
}

TA貢獻1831條經驗 獲得超10個贊
問題在于該timer變量是局部變量,并且在每個函數調用之后其值都會丟失。
您需要持久化它,可以將其放在函數外部,或者如果您不想將變量公開為全局變量,則可以將其存儲在閉包中,例如:
var endAndStartTimer = (function () {
var timer; // variable persisted here
return function () {
window.clearTimeout(timer);
//var millisecBeforeRedirect = 10000;
timer = window.setTimeout(function(){alert('Hello!');},10000);
};
})();

TA貢獻2051條經驗 獲得超10個贊
在反應中使用此方法:
class Timeout extends Component {
constructor(props){
super(props)
this.state = {
timeout: null
}
}
userTimeout(){
const { timeout } = this.state;
clearTimeout(timeout);
this.setState({
timeout: setTimeout(() => {this.callAPI()}, 250)
})
}
}
例如,如果您只想在用戶停止輸入后才調用API,則該功能非常有用??梢酝ㄟ^onKeyUp將userTimeout函數綁定到輸入。
添加回答
舉報