跳至主要內容

2621. 睡眠函数


2621. 睡眠函数open in new window

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

Given a positive integer millis, write an asynchronous function that sleeps for millis milliseconds. It can resolve any value.

Example 1:

Input: millis = 100

Output: 100

Explanation: It should return a promise that resolves after 100ms.

let t = Date.now();

sleep(100).then(() => {

console.log(Date.now() - t); // 100

});

Example 2:

Input: millis = 200

Output: 200

Explanation: It should return a promise that resolves after 200ms.

Constraints:

  • 1 <= millis <= 1000

题目大意

请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠 millis 毫秒。要求此函数可以解析任何值。

提示:

  • 1 <= millis <= 1000

解题思路

可以通过使用 Promise 来实现一个等待一定时间后继续执行的操作。

JavaScript 提供的 setTimeout 方法正好可以用于设定延迟,它允许在指定的毫秒数之后执行回调函数。

可以结合 Promise,在 Promise 内部使用 setTimeout,并在延迟结束时解决该 Promise,从而实现睡眠功能。

将这段逻辑封装到 sleep 函数中,传入的 millis 参数会决定延迟的时间。

复杂度分析

  • 时间复杂度O(1),函数本身只需要常数时间来设置一个定时器,延迟的时间不算在时间复杂度中。
  • 空间复杂度O(1),只使用了常数空间来存储定时器和 Promise

代码

/**
 * @param {number} millis
 * @return {Promise}
 */
async function sleep(millis) {
	return new Promise((resolve) => {
		setTimeout(resolve, millis); // 在 millis 毫秒后调用 resolve
	});
}

/**
 * let t = Date.now()
 * sleep(100).then(() => console.log(Date.now() - t)) // 100
 */

相关题目

题号标题题解标签难度
2636Promise 对象池 🔒open in new window[✓]
2637有时间限制的 Promise 对象open in new window[✓]