91 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # p-locate [](https://travis-ci.org/sindresorhus/p-locate)
 | ||
|  | 
 | ||
|  | > Get the first fulfilled promise that satisfies the provided testing function
 | ||
|  | 
 | ||
|  | Think of it like an async version of [`Array#find`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find). | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Install
 | ||
|  | 
 | ||
|  | ``` | ||
|  | $ npm install p-locate | ||
|  | ``` | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Usage
 | ||
|  | 
 | ||
|  | Here we find the first file that exists on disk, in array order. | ||
|  | 
 | ||
|  | ```js | ||
|  | const pathExists = require('path-exists'); | ||
|  | const pLocate = require('p-locate'); | ||
|  | 
 | ||
|  | const files = [ | ||
|  | 	'unicorn.png', | ||
|  | 	'rainbow.png', // Only this one actually exists on disk | ||
|  | 	'pony.png' | ||
|  | ]; | ||
|  | 
 | ||
|  | (async () => { | ||
|  | 	const foundPath = await pLocate(files, file => pathExists(file)); | ||
|  | 
 | ||
|  | 	console.log(foundPath); | ||
|  | 	//=> 'rainbow' | ||
|  | })(); | ||
|  | ``` | ||
|  | 
 | ||
|  | *The above is just an example. Use [`locate-path`](https://github.com/sindresorhus/locate-path) if you need this.* | ||
|  | 
 | ||
|  | 
 | ||
|  | ## API
 | ||
|  | 
 | ||
|  | ### pLocate(input, tester, [options])
 | ||
|  | 
 | ||
|  | Returns a `Promise` that is fulfilled when `tester` resolves to `true` or the iterable is done, or rejects if any of the promises reject. The fulfilled value is the current iterable value or `undefined` if `tester` never resolved to `true`. | ||
|  | 
 | ||
|  | #### input
 | ||
|  | 
 | ||
|  | Type: `Iterable<Promise | unknown>` | ||
|  | 
 | ||
|  | An iterable of promises/values to test. | ||
|  | 
 | ||
|  | #### tester(element)
 | ||
|  | 
 | ||
|  | Type: `Function` | ||
|  | 
 | ||
|  | This function will receive resolved values from `input` and is expected to return a `Promise<boolean>` or `boolean`. | ||
|  | 
 | ||
|  | #### options
 | ||
|  | 
 | ||
|  | Type: `Object` | ||
|  | 
 | ||
|  | ##### concurrency
 | ||
|  | 
 | ||
|  | Type: `number`<br> | ||
|  | Default: `Infinity`<br> | ||
|  | Minimum: `1` | ||
|  | 
 | ||
|  | Number of concurrently pending promises returned by `tester`. | ||
|  | 
 | ||
|  | ##### preserveOrder
 | ||
|  | 
 | ||
|  | Type: `boolean`<br> | ||
|  | Default: `true` | ||
|  | 
 | ||
|  | Preserve `input` order when searching. | ||
|  | 
 | ||
|  | Disable this to improve performance if you don't care about the order. | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Related
 | ||
|  | 
 | ||
|  | - [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently | ||
|  | - [p-filter](https://github.com/sindresorhus/p-filter) - Filter promises concurrently | ||
|  | - [p-any](https://github.com/sindresorhus/p-any) - Wait for any promise to be fulfilled | ||
|  | - [More…](https://github.com/sindresorhus/promise-fun) | ||
|  | 
 | ||
|  | 
 | ||
|  | ## License
 | ||
|  | 
 | ||
|  | MIT © [Sindre Sorhus](https://sindresorhus.com) |