Gli errori di connessione vengono segnalati come un error
evento sul client Redis
oggetto.
Secondo la sezione "Riconnessione automatica" dei documenti, ioredis proverà automaticamente a riconnettersi quando la connessione a Redis viene persa (o, presumibilmente, non può essere stabilita in primo luogo). Solo dopo maxRetriesPerRequest
tentativi i comandi in sospeso "verranno cancellati con un errore", ovvero arriveranno al catch
qui:
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);
}
Poiché interrompi il programma al primo errore:
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
...i tentativi e il successivo "cancellazione con errore" non hanno mai la possibilità di essere eseguiti.
Ignora gli errori in client.on('error'
e dovresti ricevere l'errore restituito da await redisClient.get()
.