利用 js 异步特性实现程序 暂停运行/睡眠 1000 ms

428 阅读1分钟

且看代码。

async function sleep(ms) {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve()
        }, ms * 1 || 0)
    })
}

Promise 是现代 JavaScript 中异步编程的基础,是一个由异步函数返回的可以向我们指示当前操作所处的状态的对象。在 Promise 返回给调用者的时候,操作往往还没有完成,但 Promise 对象可以让我们操作最终完成时对其进行处理(无论成功还是失败)。

async / await 关键字给 Promise 的处理带来了直观和便利。由原本的链式调用变成顺序执行。

async / await 是 Node 8 后带入的语法,较低版本可以用 generator + yield + co模块 来替代。

测试代码如下。

async function testSleep() {
    console.log(new Date())
    await sleep(1000)
    console.log(new Date())
}

结果如下。时间可能稍有偏差,使用时要注意时间准确性的要求。

> testSleep()
2023-03-01T10:48:10.332Z
Promise {
  <pending>,
  [Symbol(async_id_symbol)]: 47,
  [Symbol(trigger_async_id_symbol)]: 5
}
> 2023-03-01T10:48:11.344Z