You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.2 KiB
39 lines
1.2 KiB
4 years ago
|
'use strict'
|
||
|
|
||
|
/* global SharedArrayBuffer, Atomics */
|
||
|
|
||
|
if (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {
|
||
|
const nil = new Int32Array(new SharedArrayBuffer(4))
|
||
|
|
||
|
function sleep (ms) {
|
||
|
// also filters out NaN, non-number types, including empty strings, but allows bigints
|
||
|
const valid = ms > 0 && ms < Infinity
|
||
|
if (valid === false) {
|
||
|
if (typeof ms !== 'number' && typeof ms !== 'bigint') {
|
||
|
throw TypeError('sleep: ms must be a number')
|
||
|
}
|
||
|
throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')
|
||
|
}
|
||
|
|
||
|
Atomics.wait(nil, 0, 0, Number(ms))
|
||
|
}
|
||
|
module.exports = sleep
|
||
|
} else {
|
||
|
|
||
|
function sleep (ms) {
|
||
|
// also filters out NaN, non-number types, including empty strings, but allows bigints
|
||
|
const valid = ms > 0 && ms < Infinity
|
||
|
if (valid === false) {
|
||
|
if (typeof ms !== 'number' && typeof ms !== 'bigint') {
|
||
|
throw TypeError('sleep: ms must be a number')
|
||
|
}
|
||
|
throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')
|
||
|
}
|
||
|
const target = Date.now() + Number(ms)
|
||
|
while (target > Date.now()){}
|
||
|
}
|
||
|
|
||
|
module.exports = sleep
|
||
|
|
||
|
}
|