Kesalahan koneksi dilaporkan sebagai error
acara pada klien Redis
objek.
Menurut bagian "Sambungkan ulang otomatis" dari dokumen, ioredis akan secara otomatis mencoba menyambung kembali ketika koneksi ke Redis terputus (atau, mungkin, tidak dapat dibuat sejak awal). Hanya setelah maxRetriesPerRequest
percobaan akankah perintah yang tertunda "dihapus dengan kesalahan", yaitu sampai ke catch
di sini:
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);
}
Karena Anda menghentikan program pada kesalahan pertama:
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
... percobaan ulang dan "pembilasan dengan kesalahan" berikutnya tidak pernah berhasil.
Abaikan kesalahan di client.on('error'
, dan Anda akan mendapatkan kesalahan yang dikembalikan dari await redisClient.get()
.