Para minimizar la duplicación de código, he escrito algunas funciones asíncronas JS/TS simples encapsulando la función síncrona respectiva dentro de una Promesa. Pero, al no ver esto en otra parte, me preocupa que pueda estar pasando por alto algún problema de diseño.
Por ejemplo:
function fileExistsSync(path: string) { try { const result = Deno.statSync(path); return result.isFile; } catch (err) { if (err instanceof Deno.errors.PermissionDenied) { throw err; } return false; } } async function fileExists(path: string) { return await Promise.resolve().then(() => fileExistsSync(path)); } async function fileExistsAsync(path: string) { try { const result = await Deno.stat(path); return result.isFile; } catch (err) { if (err instanceof Deno.errors.PermissionDenied) { throw err; } return false; } } ¿Hay alguna diferencia observable entre las funciones fileExists() y fileExistsAsync() ?
Sí, porque fileExists usa Deno.statSync donde fileExistsAsync usa Deno.stat .
Las versiones de sincronización de las funciones de IO bloquean todo el tiempo de ejecución de ejecución de JS, mientras que la versión de promesa/async Deno.stat permite que otro código JS continúe ejecutándose mientras espera un resultado.