实现异步操作sleep

这两个函数 sleepdelay 都是使用 JavaScript 的 Promise 和 setTimeout 来实现异步操作的。不过它们的功能略有不同,下面我为你详细解释:

sleep 函数

sleep 函数接受一个秒数 seconds,并返回一个 Promise,该 Promise 在指定的秒数后解析。它主要用于在异步操作中模拟等待或延迟。

复制代码
const sleep = (seconds) => new Promise(resolve => setTimeout(resolve, seconds));

// 使用示例
async function demo() {
  console.log('开始');
  await sleep(2); // 等待2秒
  console.log('2秒后');
}

demo();

delay 函数

delay 函数接受一个函数 func、一个秒数 seconds 和一些额外的参数 ...args。这个函数返回一个 Promise,该 Promise 在指定的秒数后调用传入的函数 func 并将其结果作为 Promise 的解析值。如果 func 函数抛出异常,那么 delay 返回的 Promise 会被拒绝。

复制代码
function delay (func, seconds, ...args) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      Promise.resolve(func(...args)).then(resolve, reject); // 注意这里也处理了reject
    }, seconds);
  });
}

// 使用示例
function greet(name) {
  return `Hello, ${name}!`;
}

delay(greet, 2000, 'World').then(result => console.log(result)); // 等待2秒后输出 "Hello, World!"

注意事项

  • delay 函数中,Promise.resolve(func(...args)) 是为了确保即使 func 不是一个返回 Promise 的函数,我们也能以统一的方式处理其返回值或抛出的异常。
  • 如果 func 是一个返回 Promise 的函数,那么 delay 也会等待这个 Promise 解析或拒绝后再继续。
  • delay 的实现中,我们同时处理了 resolvereject 的情况,以确保即使 func 抛出异常,delay 返回的 Promise 也能正确地拒绝。
  • delay 函数提供了更高级的功能,因为它允许你在延迟后执行任意函数并处理其结果或异常。而 sleep 函数则更简单,只是简单地等待一段时间。
相关推荐
独好紫罗兰9 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n9 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
AIFarmer9 小时前
在EV3上运行Python语言——无线编程
python·ev3
大鱼前端9 小时前
为什么我说CSS-in-JS是前端“最佳”的糟粕设计?
前端
不会代码的小测试9 小时前
UI自动化-POM封装
开发语言·python·selenium·自动化
不爱吃糖的程序媛9 小时前
Capacitor:跨平台Web原生应用开发利器,现已全面适配鸿蒙
前端·华为·harmonyos
2401_841495649 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦9 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
CHU7290359 小时前
淘宝扭蛋机抽盒小程序前端功能解析:解锁趣味抽盒新体验
前端·小程序
roman_日积跬步-终至千里9 小时前
【Java并发】Java 线程池实战:警惕使用CompletableFuture.supplyAsync
java·开发语言·网络