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