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
			| 
								 
											3 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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |