UNPKG

986 BJavaScriptView Raw
1const { createAbortError } = require('./AbortController')
2
3/**
4 * Return a Promise that resolves after `ms` milliseconds.
5 *
6 * @param {number} ms - Number of milliseconds to wait.
7 * @param {{ signal?: AbortSignal }} [opts] - An abort signal that can be used to cancel the delay early.
8 * @returns {Promise<void>} A Promise that resolves after the given amount of `ms`.
9 */
10module.exports = function delay (ms, opts) {
11 return new Promise((resolve, reject) => {
12 if (opts && opts.signal && opts.signal.aborted) {
13 return reject(createAbortError())
14 }
15
16 function onabort () {
17 clearTimeout(timeout)
18 cleanup()
19 reject(createAbortError())
20 }
21
22 const timeout = setTimeout(() => {
23 cleanup()
24 resolve()
25 }, ms)
26
27 if (opts && opts.signal) {
28 opts.signal.addEventListener('abort', onabort)
29 }
30 function cleanup () {
31 if (opts && opts.signal) {
32 opts.signal.removeEventListener('abort', onabort)
33 }
34 }
35 })
36}