Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Redis (ioredis) - Não é possível detectar erros de conexão para tratá-los normalmente


Erros de conexão são relatados como um error evento no cliente Redis objeto.

De acordo com a seção "Reconexão automática" dos documentos, o ioredis tentará se reconectar automaticamente quando a conexão com o Redis for perdida (ou, presumivelmente, incapaz de ser estabelecida em primeiro lugar). Somente após maxRetriesPerRequest tentativas os comandos pendentes "serão liberados com um erro", ou seja, chegarão ao catch aqui:
  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);
  }

Desde que você interrompe seu programa no primeiro erro:
  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

...as novas tentativas e a subsequente "limpeza com erro" nunca têm a chance de serem executadas.

Ignore os erros em client.on('error' , e você deve obter o erro retornado de await redisClient.get() .