实现 sleep 函数
使用 Promise 和 setTimeout 实现异步延迟函数
问题
实现一个 sleep 函数,返回一个 Promise,在指定毫秒数后 Promise 变为完成状态。
export function sleep(ms: number): Promise<undefined> {
// 补全此处代码
throw new Error('功能待实现');
}
async function main() {
console.log('a');
await sleep(1000);
console.log('b'); // 1秒后输出
}
解答
/**
* @file 返回一个 Promise,并在 ms 毫秒后 Promise 变为完成状态
*/
export function sleep(ms: number): Promise<undefined> {
return new Promise(
(
resolve: (value: undefined) => void,
reject: (value: undefined) => void
) => {
setTimeout(() => {
resolve(undefined);
}, ms);
}
);
}
使用示例:
async function main() {
console.log('开始');
await sleep(1000);
console.log('1秒后执行');
await sleep(2000);
console.log('再过2秒执行');
}
main();
关键点
- 返回一个新的 Promise 对象
- 使用
setTimeout在指定时间后调用resolve resolve的参数为undefined,符合函数返回类型- 配合
async/await可以实现同步风格的异步延迟
目录