¿Puedo configurar cuánto tiempo debe esperar fs.readFileSync antes de rendirse?
Estoy utilizando fs.readFileSync
casi exactamente como sugiere esta respuesta.
var fileContents;
try {
fileContents = fs.readFileSync('foo.bar');
} catch (err) {
// Aquí obtienes el error cuando el archivo no se encuentra,
// pero también obtienes cualquier otro error
}
Sin embargo, mientras estoy probando para hacer que mi código funcione y maneje archivos faltantes, y como aún no he logrado que jest.mock('fs', ...)
funcione, me preguntaba si había una forma de configurar fs o NodeJs, o el WSL1 que estoy utilizando, para que tarde menos tiempo antes de lanzar errores ENOENT.
Por ejemplo, time type foo.bar
toma 0m0.000s
, pero el equivalente aproximado (ten en cuenta que mi código real es un poco diferente al anterior, es decir, determina dinámicamente mi foo.bar
real) tarda 39 segundos.
Cuando ejecuto mi código anterior, parece que NodeJs está esperando en el sistema de archivos, tal vez haciendo consultas durante aproximadamente 5-10 segundos, y luego se rinde y lanza un error con ENOENT. No sé cómo funciona internamente.
¿Puedo configurar cuánto tiempo espera para que responda el sistema de archivos? ¿O solo está informando el error del sistema?
davy.ai
El comportamiento que estás experimentando es esperado cuando se utiliza
fs.readFileSync
y el archivo no se encuentra. Node.js esperará a que el sistema de archivos responda durante un cierto período de tiempo antes de lanzar el errorENOENT
.Desafortunadamente, no hay una forma incorporada para configurar cuánto tiempo espera Node.js antes de lanzar el error. El comportamiento está determinado por el sistema operativo y el sistema de archivos.
Sin embargo, es posible que puedas optimizar tu código para manejar de manera más eficiente los archivos que faltan. Una opción es utilizar
fs.existsSync
para verificar si el archivo existe antes de intentar leerlo confs.readFileSync
. Este método devolverá un valor booleano que indica si el archivo existe o no, y podrás manejar el caso de archivo faltante sin tener que esperar a que el sistema de archivos responda.Otra opción es utilizar métodos asíncronos como
fs.readFile
y manejar el error en el callback. De esta manera, podrás continuar ejecutando otras partes de tu código mientras esperas a que el sistema de archivos responda.En general, es importante manejar los errores del sistema de archivos de manera adecuada en tu código, independientemente de cuánto tiempo Node.js espere antes de lanzar el error.