async function execBatchAndIgnoreRejected( files, fn, ...args ) {
	const promises = files.map( file =>
		Promise.resolve( fn( file, ...args ) )
			// always resolve
			.catch( () => null )
	);

	// wait for all promises to resolve
	const resolvedFiles = await Promise.all( promises );

	// filter out files that "didn't resolve"
	return resolvedFiles.filter( file => file !== null );
}
@param {string[]} files
@param {Function} fn
@param {...*} args
@returns {Promise}