JS中實現(xiàn)類似sleep、wait、delay的延時功能實例代碼
前言
編寫代碼時很多時候需要進行流程化的操作,各個流程間通常需要等待一定時間,這在很多語言中通常可以使用 sleep 、 wait 、 delay 等函數(shù)來實現(xiàn)。JavaScript原生并沒有類似的功能,想要延時通常就是使用 setTimeout(functionRef, delay) 方法。該方法使用比較簡單,但是當一個流程中如果需要多次延時,就會出現(xiàn)回調地獄:
setTimeout(() => {
console.log(`first print`);
setTimeout(() => {
console.log(`second print`);
setTimeout(() => {
console.log(`third print`);
}, 1000);
}, 1000);
}, 1000);
這種寫法代碼可讀性和可維護性非常差,這種應用場景下使用很多支持多線程的語言中的延時函數(shù)就會方便很多?,F(xiàn)在JS中加入了很多新的語法功能,可以方便的改造現(xiàn)有方法來實現(xiàn)類似其他語言中 sleep 、 wait 、 delay 的功能。
實現(xiàn)代碼
具體的實現(xiàn)方法可能有非常多種,這里使用 Promise 、async/await 來實現(xiàn)相關功能,主要代碼如下:
// 實現(xiàn)sleep功能,使用方式下面方式調用
// async function process(){
// // your code ...
// await sleep(1000);
// // your code ...
// }
function sleep(ms) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, ms);
});
}
使用演示

上面演示中使用的完整代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<script>
function getTimeStr(params) {
let now = new Date();
let year = now.getFullYear();
let month = String(now.getMonth() + 1).padStart(2, '0');
let day = String(now.getDate()).padStart(2, '0');
let hours = String(now.getHours()).padStart(2, '0');
let minutes = String(now.getMinutes()).padStart(2, '0');
let seconds = String(now.getSeconds()).padStart(2, '0');
let milliseconds = String(now.getMilliseconds()).padStart(3, '0');
let formattedTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`;
return formattedTime;
}
</script>
<script>
// 實現(xiàn)sleep功能,使用方式下面方式調用
// async function process(){
// // your code ...
// await sleep(1000);
// // your code ...
// }
function sleep(ms) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, ms);
});
}
</script>
<script>
(async () => {
await sleep(1000);
console.log(`${getTimeStr()} > first print`);
await sleep(1000);
console.log(`${getTimeStr()} > second print`);
await sleep(1000);
console.log(`${getTimeStr()} > third print`);
})()
</script>
</head>
<body>
</body>
</html>總結
到此這篇關于JS中實現(xiàn)類似sleep、wait、delay的延時功能的文章就介紹到這了,更多相關JS實現(xiàn)sleep、wait、delay延時功能內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
javascript 一個自定義長度的文本自動換行的函數(shù)
javascript 一個自定義長度的文本自動換行的函數(shù)...2007-08-08
HTML+CSS+JavaScript實現(xiàn)放大鏡效果
這篇文章主要為大家詳細介紹了HTML+CSS+JavaScript實現(xiàn)放大鏡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07

