Грешките при свързването се отчитат като error
събитие на клиентския Redis
обект.
Според раздела „Автоматично повторно свързване“ на документите, ioredis автоматично ще се опита да се свърже отново, когато връзката с Redis бъде загубена (или, вероятно, не може да бъде установена на първо място). Само след maxRetriesPerRequest
опити чакащите команди ще бъдат "изчистени с грешка", т.е. ще стигнат до catch
тук:
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);
}
Тъй като спирате програмата си при първата грешка:
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
...повторните опити и последващото "прочистване с грешка" никога не получават възможност да се стартират.
Игнорирайте грешките в client.on('error'
). , и трябва да получите грешката, върната от await redisClient.get()
.