在 JavaScript 中等待 X 秒
本教程将讲解如何在 JavaScript 中等待 x 秒后再继续执行。我们将实现一个 delay(seconds)
函数,它将阻塞线程 x 秒。我们还将解释这个延迟的多种实现技术。
当我们谈到实现延迟函数时,使用最广泛的方法是异步的 setTimeout()
。
在 JavaScript 中使用 setTimeout()
来等待 X 秒
异步 setTimeout()
方法是高阶函数之一,它以回调函数为参数,在输入时间结束后执行该函数。参数中给出的时间是以 ms
为单位的。
console.log('I am the first log');
setTimeout(function() {
console.log('I am the third log after 5 seconds');
}, 5000);
console.log('I am the second log');
输出:
I am the first log
I am the second log
I am the third log after 5 seconds
在 JavaScript 中使用 promises
和 async/await
等待 X 秒
在异步上下文中实现延迟函数的一种方法是结合 async/await
概念和 promises
概念。我们可以创建一个延迟函数,在里面返回一个新的 promise
,我们将调用 setTimeout()
方法与我们所需的等待时间。之后,我们可以在任何异步上下文里面随意调用那个 delay
函数。
function delay(n) {
return new Promise(function(resolve) {
setTimeout(resolve, n * 1000);
});
}
async function myAsyncFunction() {
// Do what you want here
console.log('Before the delay')
await delay(5);
console.log('After the delay')
// Do what you want here too
}
myAsyncFunction();
输出:
Before the delay
After the delay
延迟函数也可以使用 ECMAScript 6 中的箭头语法进行优化,如下例。
const delay = (n) => new Promise(r => setTimeout(r, n * 1000));
使用 for
循环来实现 JavaScript 中的同步 delay
函数
假设我们没有任何异步上下文来使用上面的 delay()
函数,或者不想使用 setTimeout()
函数。在这种情况下,我们可以用普通的 for
循环和 Date()
类实现一个同步延迟函数来计算时间。
这个函数的实现非常简单。就是让 CPU 在所需时间内保持忙碌。这是通过计算经过的时间,并将其与等待时间进行比较,这样我们就可以在它之后继续执行。
function syncDelay(milliseconds) {
var start = new Date().getTime();
var end = 0;
while ((end - start) < milliseconds) {
end = new Date().getTime();
}
}
console.log('Before the delay')
syncDelay(5000);
console.log('After the delay')
输出:
Before the delay
After the delay
相关文章
JavaScript 函数重载
发布时间:2024/03/17 浏览次数:129 分类:JavaScript
-
本教程展示了如何使用 if-else 语句、switch 语句和函数表达式在 JavaScript 中实现函数重载。
JavaScript 中的 history.forward() 函数
发布时间:2024/03/17 浏览次数:195 分类:JavaScript
-
本文将帮助你了解如何使用 JavaScript 浏览浏览器。
JavaScript console.error
发布时间:2024/03/17 浏览次数:61 分类:JavaScript
-
JavaScript 有多个与其他数据类型和对象交互的对象。控制台也是一个类似的对象,它允许我们在浏览器环境中预览开发输出。本文展示了控制台在 JavaScript 中的使用。
Discord JavaScript 控制台
发布时间:2024/03/17 浏览次数:177 分类:JavaScript
-
实验上,通过控制台面板向收件人发送消息是一个有趣的事实。几乎抽象的 UI 在发送和接收消息时几乎没有任何踪迹来了解正在运行的内容。使用标头,添加特定的用户 ID,结合 Disco