Les erreurs de connexion sont signalées comme une error
événement sur le client Redis
objet.
Selon la section "Reconnexion automatique" de la documentation, ioredis essaiera automatiquement de se reconnecter lorsque la connexion à Redis est perdue (ou, vraisemblablement, incapable d'être établie en premier lieu). Seulement après maxRetriesPerRequest
tentatives les commandes en attente "seront-elles vidées avec une erreur", c'est-à-dire accéderont au catch
ici :
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);
}
Puisque vous arrêtez votre programme à la première erreur :
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
... les tentatives et le "vidage avec une erreur" qui s'ensuit n'ont jamais la possibilité de s'exécuter.
Ignorer les erreurs dans client.on('error'
, et vous devriez obtenir l'erreur renvoyée par await redisClient.get()
.