function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用方法
async function run() {
console.log('开始等待...');
await sleep(2000); // 等待2000毫秒(2秒)
console.log('等待结束!');
}
run();
在这个例子中,wait函数返回一个 Promise,在指定的毫秒数之后通过调用 resolve来解决这个Promise。run函数是一个异步函数,它使用await关键字来暂停执行,直到等待的 Promise被解决。这样就可以在JavaScript中实现等待功能。
- 这段代码会内存泄漏吗?
上面wait
函数代码本身不会导致内存泄漏。它正确地使用了setTimeout
函数和Promise解析机制,没有保留任何不必要的引用或创建未管理的资源。
以下是它不会造成内存泄漏的原因:
-
setTimeout:
setTimeout
函数用于安排一个回调函数(在此例中为resolve
函数)在指定时间(ms
)后执行。当超时时间到达时,JavaScript运行时将执行该回调,并随后释放对其的所有引用,确保关联内存被释放。 -
Promise解析: 在
setTimeout
回调中调用resolve
函数后,它将解析由wait
函数返回的Promise。JavaScript引擎会跟踪Promise的解析和拒绝状态,但一旦所有已连接的.then
、.catch
或.finally
回调(如果存在)都已执行完毕,已解析的Promise及其关联数据将在没有其他引用的情况下被垃圾回收。 -
无未管理资源: 该代码没有创建任何需要手动清理的未管理资源(如全局变量、事件监听器、数据库连接等)。Promise和
setTimeout
都是JavaScript内置功能,它们的资源管理由语言运行时自动处理。