Los errores de conexión se informan como un error
evento en el cliente Redis
objeto.
De acuerdo con la sección "Reconexión automática" de los documentos, ioredis intentará volver a conectarse automáticamente cuando se pierda la conexión a Redis (o, presumiblemente, no se pueda establecer en primer lugar). Solo después de maxRetriesPerRequest
intentos, los comandos pendientes "se eliminarán con un error", es decir, llegarán a catch
aquí:
try {
cachedItem = await redisClient.get(queryString); // This emit an error on the redis client, because it fails to connect (that's intended, to test the behaviour)
} catch (e) {
logger.error(e); // It never goes there, as the error isn't "thrown", but rather "emitted" and handled by redis its own way
epsagon.setError(e);
}
Dado que detiene su programa en el primer error:
client.on('error', function (e) {
// ...
if (e.message === 'ERR invalid password') {
logger.error(`Fatal error occurred "${e.message}". Stopping server.`);
throw e; // Fatal error, don't attempt to fix
...los reintentos y el subsiguiente "lavado con un error" nunca tienen la oportunidad de ejecutarse.
Ignora los errores en client.on('error'
, y debería obtener el error devuelto por await redisClient.get()
.