Details zur Fehlermeldung:
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)
Quellcode des Redis-Clients:
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');
}
}
Dieser Fehler tritt gelegentlich auf, nicht die ganze Zeit. Ich denke, vielleicht gibt es einen Fehler und sollte command_obj überprüfen, wenn Sie aus der Befehlswarteschlange wechseln.
Hast du diesen Code drin?
const redis = require('redis');
require('bluebird').promisifyAll(redis);
Es ist sehr schwer, dies zu debuggen. Es sollte eigentlich nie passieren. Dies zeigt an, dass der Zustand nicht mehr korrekt ist. Gibt es eine Möglichkeit, diesen Fehler zuverlässig auszulösen und haben Sie weitere Informationen für mich? Wie ein minimaler Code-Schnipsel, die node_redis-Version und die Parser-Version, welche Befehle Sie verwenden und alles andere, was hilfreich sein könnte, um dies zu debuggen.
Ich bekomme diesen Fehler auch zeitweise. In meinem Fall scheint es, dass ich manchmal nach dem Aufrufen von "client.punsubcribe()" mit diesen Fehlern überflutet werde, bis ich den Prozess neu starte.
Bearbeiten: Ich sollte auch hinzufügen, dass es normalerweise 4 gleichzeitige Redis-Clients pro Knoteninstanz gibt, zwei bis zwei verschiedene Hosts
Traceback ist mehr oder weniger identisch mit OPs, aber der Vollständigkeit halber:
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)
Nach der Ausführung im Debug-Modus bemerkte ich, dass diese Fehler mit connection gone from close event
Meldungen verfolgt werden (im Gegensatz zu den typischeren connection gone from end event
ich während der normalen Beendigung des Leerlaufprozesses vom Redis-Server sehe).
Es passiert auch nur zeitweise und wenn der App-Server durch einen Cron-Job besonders stark belastet wird
Redis 3.0.2-Knoten 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)
Außerdem gibt es ungefähr zur gleichen Zeit verwandte AbortErrors, die den Server nicht zum Absturz bringen, weil sie erwischt werden
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'
}
Hilfreichster Kommentar
Ich bekomme diesen Fehler auch zeitweise. In meinem Fall scheint es, dass ich manchmal nach dem Aufrufen von "client.punsubcribe()" mit diesen Fehlern überflutet werde, bis ich den Prozess neu starte.
Bearbeiten: Ich sollte auch hinzufügen, dass es normalerweise 4 gleichzeitige Redis-Clients pro Knoteninstanz gibt, zwei bis zwei verschiedene Hosts
Traceback ist mehr oder weniger identisch mit OPs, aber der Vollständigkeit halber: