node memcached 有一个函数 get
来检索 memcachd 键值,例如:
memcached.get( "hello",function( err, result ){
if( err ) console.error( err );
this.r = result;
console.dir( result );
memcached.end();});
函数中的第二个参数是回调函数
在回调函数中,我可以轻松记录我的 key 的值。
我尝试将属性 r
分配给 memcached
,当我尝试在 get
函数外部记录 memcached.r
时,会出现 undefined
结果。
我的代码有什么问题吗?
虽然 this
看起来像一个变量并且通常表现得像一个变量,但它并不是真正的变量,因此它的表现不像闭包中的变量。当一个函数嵌套在另一个函数中时,内部函数会获得一个全新版本的 this
,它不太可能与外部函数的 this
指向相同的东西。
因此,如果你需要在内部函数中引用外部函数的 this
,你必须首先将其复制到一个真正的变量中(大多数人喜欢称之为 self
但有些人更喜欢 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 };
});
};
看起来您正在尝试异步调用多个函数并期望从它们返回
一个值。那根本行不通。
我是一名优秀的程序员,十分优秀!