JS中實(shí)現(xiàn)類似sleep、wait、delay的延時(shí)功能實(shí)例代碼
前言
編寫(xiě)代碼時(shí)很多時(shí)候需要進(jìn)行流程化的操作,各個(gè)流程間通常需要等待一定時(shí)間,這在很多語(yǔ)言中通??梢允褂?nbsp;sleep 、 wait 、 delay 等函數(shù)來(lái)實(shí)現(xiàn)。JavaScript原生并沒(méi)有類似的功能,想要延時(shí)通常就是使用 setTimeout(functionRef, delay) 方法。該方法使用比較簡(jiǎn)單,但是當(dāng)一個(gè)流程中如果需要多次延時(shí),就會(huì)出現(xiàn)回調(diào)地獄:
setTimeout(() => {
console.log(`first print`);
setTimeout(() => {
console.log(`second print`);
setTimeout(() => {
console.log(`third print`);
}, 1000);
}, 1000);
}, 1000);
這種寫(xiě)法代碼可讀性和可維護(hù)性非常差,這種應(yīng)用場(chǎng)景下使用很多支持多線程的語(yǔ)言中的延時(shí)函數(shù)就會(huì)方便很多?,F(xiàn)在JS中加入了很多新的語(yǔ)法功能,可以方便的改造現(xiàn)有方法來(lái)實(shí)現(xiàn)類似其他語(yǔ)言中 sleep 、 wait 、 delay 的功能。
實(shí)現(xiàn)代碼
具體的實(shí)現(xiàn)方法可能有非常多種,這里使用 Promise 、async/await 來(lái)實(shí)現(xiàn)相關(guān)功能,主要代碼如下:
// 實(shí)現(xiàn)sleep功能,使用方式下面方式調(diào)用
// 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>
// 實(shí)現(xiàn)sleep功能,使用方式下面方式調(diào)用
// 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>總結(jié)
到此這篇關(guān)于JS中實(shí)現(xiàn)類似sleep、wait、delay的延時(shí)功能的文章就介紹到這了,更多相關(guān)JS實(shí)現(xiàn)sleep、wait、delay延時(shí)功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
京東優(yōu)選小程序的實(shí)現(xiàn)代碼示例
這篇文章主要介紹了京東優(yōu)選小程序的實(shí)現(xiàn)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
一百行JS代碼實(shí)現(xiàn)一個(gè)校驗(yàn)工具
這篇文章主要介紹了一百行JS代碼實(shí)現(xiàn)一個(gè)校驗(yàn)工具,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
JavaScript實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的八種方式
這篇文章介紹了JavaScript實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的八種方式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
javascript 一個(gè)自定義長(zhǎng)度的文本自動(dòng)換行的函數(shù)
javascript 一個(gè)自定義長(zhǎng)度的文本自動(dòng)換行的函數(shù)...2007-08-08
js動(dòng)態(tài)設(shè)置鼠標(biāo)事件示例代碼
動(dòng)態(tài)設(shè)置鼠標(biāo)事件的方法有很多,接下來(lái)為大家介紹下js中是如何做到的,感興趣的朋友不要錯(cuò)過(guò)2013-10-10
JavaScript URL參數(shù)讀取改進(jìn)版
此前發(fā)表的那一版確實(shí)能不用循環(huán),但是總用正則表達(dá)式的替換,不一定比用循環(huán)提高性能,而且把程序搞得有些太復(fù)雜了。從《JavaScript權(quán)威指南》上學(xué)到的范例如下2009-01-01
HTML+CSS+JavaScript實(shí)現(xiàn)放大鏡效果
這篇文章主要為大家詳細(xì)介紹了HTML+CSS+JavaScript實(shí)現(xiàn)放大鏡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07

