Viki

Viki 写东西的地方

努力上进且优秀
x
github
email
bilibili

來試試 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 官方文檔

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。