Rincian pesan kesalahan:
C:\Users\xxxxx\node_modules\redis\index.js:722
if (typeof command_obj.callback === 'function') {
^
TypeError: Cannot read property 'callback' of undefined
at normal_reply (C:\Users\xxxxx\node_modules\redis\index.js:722:28)
at RedisClient.return_reply (C:\Users\xxxxx\node_modules\redis\index.js:824:9)
at JavascriptRedisParser.returnReply (C:\Users\xxxxx\node_modules\redis\index.js:192:18)
at JavascriptRedisParser.execute (C:\Users\xxxxx\node_modules\redis-parser\lib\parser.js:574:12)
at Socket.<anonymous> (C:\Users\xxxxx\node_modules\redis\index.js:274:27)
at Socket.emit (events.js:189:13)
at addChunk (_stream_readable.js:284:12)
at readableAddChunk (_stream_readable.js:265:11)
at Socket.Readable.push (_stream_readable.js:220:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Kode sumber klien redis:
function normal_reply (self, reply) {
var command_obj = self.command_queue.shift();
if (typeof command_obj.callback === 'function') {
if (command_obj.command !== 'exec') {
reply = self.handle_reply(reply, command_obj.command, command_obj.buffer_args);
}
command_obj.callback(null, reply);
} else {
debug('No callback for reply');
}
}
Kesalahan ini terjadi sesekali, tidak setiap saat. Saya pikir mungkin ada bug, dan harus memeriksa command_obj ketika beralih dari antrian perintah.
Apakah Anda memiliki kode ini?
const redis = require('redis');
require('bluebird').promisifyAll(redis);
Sangat sulit untuk men-debug ini. Ini seharusnya tidak pernah terjadi. Hal ini menunjukkan bahwa keadaan sudah tidak benar lagi. Apakah ada cara yang dapat Anda andalkan untuk memicu kesalahan ini dan apakah Anda memiliki informasi lebih lanjut untuk saya? Seperti potongan kode minimal, versi node_redis dan versi parser, perintah apa yang Anda gunakan dan hal lain yang mungkin berguna untuk men-debug ini.
Saya juga mendapatkan kesalahan ini sesekali. Dalam kasus saya tampaknya kadang-kadang setelah memanggil "client.punsubcribe()" saya dibanjiri dengan kesalahan ini sampai saya memulai kembali prosesnya.
edit: Saya juga harus menambahkan bahwa biasanya ada 4 klien Redis bersamaan per instance node, dua hingga dua host yang berbeda
Traceback kurang lebih identik dengan OP, tetapi untuk kelengkapan:
TypeError: Cannot read property 'callback' of undefined
at normal_reply (/snapshot/stream-node/node_modules/redis/index.js:722:28)
at RedisClient.return_reply (/snapshot/stream-node/node_modules/redis/index.js:824:9)
at JavascriptRedisParser.returnReply (/snapshot/stream-node/node_modules/redis/index.js:192:18)
at JavascriptRedisParser.execute (/snapshot/stream-node/node_modules/redis-parser/lib/parser.js:574:12)
at Socket.<anonymous> (/snapshot/stream-node/node_modules/redis/index.js:274:27)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:287:12)
at readableAddChunk (_stream_readable.js:268:11)
at Socket.Readable.push (_stream_readable.js:223:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Setelah menjalankan mode debug, saya perhatikan bahwa kesalahan ini dilacak dengan pesan connection gone from close event
(berlawanan dengan connection gone from end event
saya lihat selama penghentian proses idle normal dari server redis)
Itu juga hanya terjadi sebentar-sebentar dan ketika server aplikasi berada di bawah beban yang sangat tinggi dari pekerjaan cron
redis 3.0.2 node 14.15.1, redis-parser 3
TypeError: Cannot read property 'callback' of undefined
at normal_reply (/app/node_modules/redis/index.js:650:28)
at RedisClient.return_reply (/app/node_modules/redis/index.js:752:9)
at JavascriptRedisParser.returnReply (/app/node_modules/redis/index.js:137:18)
at JavascriptRedisParser.execute (/app/node_modules/redis-parser/lib/parser.js:544:14)
at Socket.<anonymous> (/app/node_modules/redis/index.js:218:27)
at /app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:54:19
at Scope._activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/async_hooks.js:53:14)
at Scope.activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:12:19)
at Socket.bound (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:53:20)
at Socket.emit (events.js:315:20)
at addChunk (_stream_readable.js:309:12)
at readableAddChunk (_stream_readable.js:284:9)
at Socket.Readable.push (_stream_readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
at TCP.callbackTrampoline (internal/async_hooks.js:129:14)
Juga ada AbortErrors terkait sekitar waktu yang sama yang tidak membuat server crash karena tertangkap
AbortError: Redis connection lost and command aborted. It might have been processed.
at RedisClient.flush_and_error (/app/node_modules/redis/index.js:297:23)
at RedisClient.connection_gone (/app/node_modules/redis/index.js:602:14)
at Socket.<anonymous> (/app/node_modules/redis/index.js:226:14)
at /app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:54:19
at Scope._activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/async_hooks.js:53:14)
at Scope.activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:12:19)
at Socket.bound (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:53:20)
at Object.onceWrapper (events.js:422:26)
at Socket.emit (events.js:315:20)
at TCP.<anonymous> (net.js:673:12)
at TCP.callbackTrampoline (internal/async_hooks.js:129:14)
at new Command (/app/node_modules/redis/lib/command.js:12:22)
at RedisClient.info (/app/node_modules/redis/lib/individualCommands.js:169:39)
at RedisClient.ready_check (/app/node_modules/redis/index.js:469:10)
at RedisClient.on_connect (/app/node_modules/redis/index.js:363:14)
at Socket.<anonymous> (/app/node_modules/redis/index.js:212:14)
at /app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:54:19
at Scope._activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/async_hooks.js:53:14)
at Scope.activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:12:19)
at Socket.bound (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:53:20)
at Object.onceWrapper (events.js:421:28)
at Socket.emit (events.js:327:22)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1132:10)
at TCPConnectWrap.callbackTrampoline (internal/async_hooks.js:129:14)
{
code: 'UNCERTAIN_STATE',
command: 'INFO'
}
Komentar yang paling membantu
Saya juga mendapatkan kesalahan ini sesekali. Dalam kasus saya tampaknya kadang-kadang setelah memanggil "client.punsubcribe()" saya dibanjiri dengan kesalahan ini sampai saya memulai kembali prosesnya.
edit: Saya juga harus menambahkan bahwa biasanya ada 4 klien Redis bersamaan per instance node, dua hingga dua host yang berbeda
Traceback kurang lebih identik dengan OP, tetapi untuk kelengkapan: