TypeScript 中的睡眠
Shuvayan Ghosh Dastidar
2023年1月30日
在實現業務邏輯時,經常需要給函式新增延遲或者休眠一段時間等待某個 API 呼叫。
本教程將討論在 TypeScript 中休眠執行緒的不同方式和概念。
在 TypeScript 中使用阻塞來休眠執行緒
阻塞可用於以同步方式等待一段時間。下面的程式碼示例演示瞭如何阻止執行緒,以便在幾秒鐘後執行。
function delayBlocking(milliseconds: number){
const timeInitial : Date = new Date();
var timeNow : Date = new Date();
for ( ; timeNow - timeInitial < milliseconds; ){
timeNow = new Date();
}
console.log('Sleep done!');
}
console.log('Starting, will sleep for 5 secs now');
delayBlocking(5000);
console.log('Normal code execution continues now');
輸出:
Starting, will sleep for 5 secs now
Sleep done!
Normal code execution continues now
上面的程式碼段肯定會停止執行一段時間,但有時這並不是想要的效果,因為延遲很大,整個程式碼都會被阻塞。
在 TypeScript 中使用 Promise 休眠
setTimeout
函式用於在一些延遲後解決 Promise
。此方法可以與 then
或 async...await
連結。以下程式碼段顯示了 then
的行為。
function delay(milliseconds : number) {
return new Promise(resolve => setTimeout( resolve, milliseconds));
}
console.log('Starting, will sleep for 5 secs now');
delay(5000).then(() => console.log('Normal code execution continues now') );
使用 async..await
它可以根據以下程式碼段實現-
function delay(milliseconds : number) {
return new Promise(resolve => setTimeout( resolve, milliseconds));
}
( async() => {
console.log('Starting, will sleep for 5 secs now');
await delay(5000);
console.log('Normal code execution continues now');
})();