接続エラーは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()
から返されたエラーを取得する必要があります 。