3 回答

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

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

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
在反應(yīng)中使用此方法:
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)
})
}
}
例如,如果您只想在用戶停止輸入后才調(diào)用API,則該功能非常有用。可以通過(guò)onKeyUp將userTimeout函數(shù)綁定到輸入。
添加回答
舉報(bào)