建立一個承諾,非同步可以在setTimeout 回調觸發後,我們可以將setTimeout 函數包裝在Promise在建構函式中,如下面的程式碼片段所示:
<br>function setTimeoutReturnPromise(delay) {<br> return new Promise((resolve )=> {<pre class="brush:php;toolbar:false">setTimeout(resolve, delay);
});
}
此函數將延遲作為參數並傳回承諾。 Promise 將在指定的延遲過去後解析,並且 setTimeout 函數的回呼將會執行。
現在,我們的 async 函數可以使用 setTimeoutReturnPromise 函數建立一個可以傳回的 Promise。這允許我們在呼叫 setTimeout 回調後使用 then() 方法執行程式碼:
<br>async(function() {<br> setTimeoutReturnPromise(5000).then()=>> {<pre class="brush:php;toolbar:false">console.log("async called back");
});
});
自從ES2015 和現代JavaScript 引入以來,Promise 已經成為內建的特徵。語法進行了簡化,如下所示:
<br>function later(delay) {<br> return new Promise((resolve) =>; {<pre class="brush:php;toolbar:false">setTimeout(resolve, delay);
});
}
使用箭頭函數和可選的分辨率值參數,可以進一步壓縮程式碼:
<br>const later = (延遲, 值) => new Promise(resolve => setTimeout(resolve, delay, value));<br>
如果你想取消超時,你可以回傳一個有promise和cancel的物件方法:
<br>const later = (delay, value) =>; {<br> 讓計時器 = 0;<br> 讓拒絕 = null;<br> const Promise = new Promise((resolve, _reject) => {<pre class="brush:php;toolbar:false">reject = _reject; timer = setTimeout(resolve, delay, value);
});
回傳{
get promise() { return promise; }, cancel() { if (timer) { clearTimeout(timer); timer = 0; reject(); reject = null; } }
};
};
此方法允許您使用cancel() 方法取消逾時並拒絕承諾。
以上是如何在 JavaScript 中使用 setTimeout 建立和管理 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!