Verbindingsfouten worden gerapporteerd als een error
gebeurtenis op de client Redis
voorwerp.
Volgens het gedeelte "Automatisch opnieuw verbinden" van de documenten, zal ioredis automatisch proberen opnieuw verbinding te maken wanneer de verbinding met Redis wordt verbroken (of, vermoedelijk, in de eerste plaats niet tot stand kan worden gebracht). Alleen na maxRetriesPerRequest
pogingen zullen de wachtende commando's "doorspoelen met een fout", d.w.z. naar de catch
gaan hier:
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);
}
Aangezien u uw programma stopt bij de eerste fout:
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
...de nieuwe pogingen en het daaropvolgende "flushen met een fout" krijgen nooit de kans om uit te voeren.
Negeer de fouten in client.on('error'
, en u zou de fout moeten terugkrijgen van await redisClient.get()
.