Skip to content
/ nanodelay Public

A tiny (37 bytes) Promise wrapper around setTimeout

License

Notifications You must be signed in to change notification settings

ai/nanodelay

Repository files navigation

Nano Delay

A tiny Promise wrapper around setTimeout for JavaScript. Returns a Promise and resolve it after a specific amount of time.

  • Only 45 bytes (minified and gzipped), 10 times smaller than delay library.
  • Has good ES modules and TypeScript support.
import { delay } from 'nanodelay'

async function foo () {
  await delay(300)
  // Executed after 300 milliseconds
}

delay(300).then(() => {
  // Executed after 300 milliseconds
})
Sponsored by Evil Martians

Usage

The second argument will be used in Promise as resolved value (useful to pass variables between scopes):

createClient().then(client => {
  expect(client).toBeOK
  return delay(50, client)
}).then(client => {
  expect(client).toBeConnected()
})

For quick hacks you can load Nano Delay from CDN. Do not use it in production because of low performance.

import { delay } from 'https://cdn.jsdelivr.net/npm/nanodelay/index.js'

Future

Node.js 16+ has built-in Promise-based setTimeout. After January 2023 you can remove nanodelay from your dependencies.

import { setTimeout } from 'timers/promises'

await setTimeout(5000)

About

A tiny (37 bytes) Promise wrapper around setTimeout

Resources

License

Stars

Watchers

Forks