Viki

Viki 写东西的地方

努力上进且优秀
github
email
x
steam
bilibili
douban

来试试 node 内置的 "delay" 函数

前言#

在实际开发中,经常遇到需要在异步操作里进行 “延时” 操作的情况,通常会编写类似于以下的 util 函数来进行处理。

const delay = (ms: number) => new Promise((r) => setTimeout(r, ms));

这很好,很简洁,也完美的贴合了我们的需求。但是,如果你的代码跑在纯 node 环境下,有一个新的替代方案可以考虑。

使用 node Timers Promises API#

不如试试 node 从 v15.0.0 开始内置支持的 Timers Promises API 提供的 setTimeout 函数,它返回一个 Promise,与我们刚提到的延时函数表现基本一致,同时支持更多用法。

import { setTimeout } from 'node:timers/promises'

const sayHi = async () => {
  console.log('Hi!')
}

const doSomethingAsync = async () => {
  console.log('yolo!')
  
  await setTimeout(1000)

  await sayHi()

  const res = await setTimeout(1000, 'result');

  console.log("res is: ", res)
}

doSomethingAsync()

上述代码输出结果如下。

yolo! # 立刻输出
Hi! # 一秒后输出
res is:  result # 再一秒后输出

更多详情请参考 Node.js 官方文档

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。