节点 redis 不喜欢 function.apply()
Node redis doesn't like function.apply()
我试图在节点中包装一个 redis 客户端,但我似乎在使用 .apply() 调用节点-redis 函数时遇到了一些问题。
当我尝试这样做时,这导致了问题,我能够解决这个问题,但现在异步正在使用 .apply() 调用它的函数,这现在导致了问题。
下面是我正在做的事情的简化:
var client = redis.createClient( myOptions );
function set(){
// do other stuff
client.set.apply( null, arguments );
}
但是,当我这样做时,出现以下错误:
TypeError: Cannot read property 'send_command' of null
at RedisClient.(anonymous function).RedisClient.(anonymous function) (E:\sitesroot[=12=]\node_modules\redis\lib\commands.js:45:24)
当我像这样手动传递参数时,代码运行完美:
function set( key, value ){
// do stuff
client.set( key, value );
}
这种方法不适用于包装 hgetall 之类的方法,它具有未指定数量的参数...
是否了解可能导致此问题的原因?
正如@Bergi 在上面的评论中指出的,您在申请时需要传递正确的上下文。
client.set.apply( client, arguments );
我试图在节点中包装一个 redis 客户端,但我似乎在使用 .apply() 调用节点-redis 函数时遇到了一些问题。 当我尝试这样做时,这导致了问题,我能够解决这个问题,但现在异步正在使用 .apply() 调用它的函数,这现在导致了问题。
下面是我正在做的事情的简化:
var client = redis.createClient( myOptions );
function set(){
// do other stuff
client.set.apply( null, arguments );
}
但是,当我这样做时,出现以下错误:
TypeError: Cannot read property 'send_command' of null
at RedisClient.(anonymous function).RedisClient.(anonymous function) (E:\sitesroot[=12=]\node_modules\redis\lib\commands.js:45:24)
当我像这样手动传递参数时,代码运行完美:
function set( key, value ){
// do stuff
client.set( key, value );
}
这种方法不适用于包装 hgetall 之类的方法,它具有未指定数量的参数...
是否了解可能导致此问题的原因?
正如@Bergi 在上面的评论中指出的,您在申请时需要传递正确的上下文。
client.set.apply( client, arguments );