前言:锻炼自己的思想,规范自己的编程思路。
问题:请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠这么多毫秒。要求此函数可以解析任何值。
示例:(放代码里面)
输入:millis = 100
输出:100
解释:
在 100ms 后此异步函数执行完时返回一个 Promise 对象
let t = Date.now();
sleep(100).then(() => {
console.log(Date.now() - t); // 100
});
思路:做这个题目的时候正好很想睡觉,看到这个题目差点直接躺下,撑着最后一点意志,写完这个歌题目。
题目函数给了一个正整数参数millis ,所以我使用setTimeout函数来实现休眠。它返回一个Promise 对象,当休眠时间结束后,该 Promise对象会被解析为传入的 millis 值。
setTimeout 函数接受两个参数:一个回调函数和一个延迟时间(时间以毫秒为单位)。当延迟时间结束后,回调函数会被执行。在这个例子中,我们传入了一个箭头函数作为回调函数,它会调用 resolv函数并传millis 值。这样,当延迟时间结束后,Promise 对象就会被解析为millis 值。
基于上述思考,代码如下:
/**
* @param {number} millis
*/
async function sleep(millis) {
return new Promise(resolve => setTimeout(() => resolve(millis), millis));
}
执行结果如下图:
学习到的知识点:
- 异步编程:异步编程是 JavaScript 中非常重要的一个概念,允许在不阻塞主线程的情况下执行耗时的操作。
- Promise:这返回一个Promise对象。Promise是 JavaScript 中用于表示异步操作的结果的一种对象。它提供了一种简洁、清晰的方式来组织和处理异步代码。
- setTimeout:使用 setTimeout 函数来实现休眠。setTimeout 是 JavaScript 中用于在指定时间后执行某个操作的函数。它是异步编程中常用的一个工具。
- 箭头函数:箭头函数来定义回调函数。箭头函数是一种简洁的函数定义语法,它在处理回调函数时非常方便。