节点memcached有一个函数get
来检索memcachd键值,例如:
memcached.get( "hello",function( err, result ){
if( err ) console.error( err );
this.r = result;
console.dir( result );
memcached.end();});
函数中的第二个参数是回调函数
在回调函数内部,我可以轻松记录密钥的值。
我尝试将属性r
分配给memcached
,当我尝试记录memcached.r
外get
函数undefined
结果时。
我的代码出了什么问题?
答案 0 :(得分:0)
虽然this
看起来像一个变量并且通常表现得像一个变量,但它并不是真正的变量,因此在闭包中的行为不像。当你有一个嵌套在另一个函数中的函数时,内部函数会得到一个全新的this
版本,它不太可能指向与外部函数this
相同的东西。
因此,如果你需要在内部函数中引用外部函数的this
,你必须先将它复制到一个真正的变量中(大多数人喜欢称它为self
但有些人更喜欢{ {1}})然后在内部函数中引用该变量。
但是,在您的情况下,您已经有了一个可以分配给它的真实变量,即that
,因此只需在回调中将memcached
替换为this
即可。它是由回调创建的闭包的正确范围的外部变量(可以看出,您可以在其中使用memcached
)。
[更新以包含评论中提到的代码格式正确的版本]
memcached.end()
看起来你正在尝试异步调用多个函数并期望memcached.get = function get(key, callback) {
if (Array.isArray(key)) return this.getMulti.apply(this, arguments);
this.command(function getCommand (noreply) {
return { key: key , callback: callback ,
validate: [['key', String], ['callback', Function]] ,
type: 'get' , command: 'get ' + key };
});
};
来自它们的值。这根本行不通。