Lỗi kết nối được báo cáo là một error
sự kiện trên máy khách Redis
đối tượng.
Theo phần "Tự động kết nối lại" của tài liệu, ioredis sẽ tự động cố gắng kết nối lại khi kết nối với Redis bị mất (hoặc, có lẽ là không thể thiết lập ngay từ đầu). Chỉ sau maxRetriesPerRequest
những lần thử thì các lệnh đang chờ xử lý sẽ "bị lỗi", tức là truy cập catch
tại đây:
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);
}
Vì bạn dừng chương trình của mình do lỗi đầu tiên:
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
... các lần thử lại và lần "xử lý lỗi" tiếp theo sẽ không bao giờ có cơ hội để chạy.
Bỏ qua các lỗi trong client.on('error'
và bạn sẽ nhận được lỗi trả về từ await redisClient.get()
.