當前我正在使用腳本爲我的函數設置超時3秒,然後執行下一個操作。js Promise,取消超時
function sleep(ms)
{
return new Promise((resolve) => setTimeout(resolve, ms));
}
sleep(3000).then(function()
{
// next action
});
現在我想找到一種方法來提前結束3秒超時,通過執行鼠標點擊。我將如何去實施這個?
當前我正在使用腳本爲我的函數設置超時3秒,然後執行下一個操作。js Promise,取消超時
function sleep(ms)
{
return new Promise((resolve) => setTimeout(resolve, ms));
}
sleep(3000).then(function()
{
// next action
});
現在我想找到一種方法來提前結束3秒超時,通過執行鼠標點擊。我將如何去實施這個?
這樣的事情,也許?
function sleeper(ms) {
var r;
var p = new Promise(resolve => {
r = resolve;
setTimeout(resolve, ms);
});
return {
skip: r,
promise: p
};
}
var s = sleeper(10000);
s.promise.then(() => {
console.log('Promise finished!');
});
console.log('Waiting for 10 seconds... Click the button to skip the wait.');
document.getElementById('skip').addEventListener('click', s.skip);
<input type="button" id="skip" value="Skip delay" />
作爲一個想法,也許你可以這樣做:
var timeout, myResolver;
function sleep(ms)
{
return new Promise((resolve) => {
myResolver = resolve;
timeout = setTimeout(resolve, ms);
});
}
sleep(3000).then(function()
{
// next action
});
function myStopFunction() {
clearTimeout(timeout);
myResolver();
}
你用承諾這有什麼特別的原因嗎?承諾是偉大的,但它們不可取消。 'setTimeout'返回一個ID,您可以使用它來取消即將進行的函數調用。 –
您需要清除超時然後調用解析器,如果你想或繼續前進。 – Dabbas