1

节点 memcached 具有get检索 memcachd 键值的功能,例如:

memcached.get( "hello",function( err, result ){
if( err ) console.error( err );
this.r = result;
console.dir( result );
memcached.end();});

函数中的第二个参数是回调函数
中的回调函数,我可以轻松地记录我的键的值。
我试图分配一个属性rmemcached当我尝试记录memcached.r外部get函数undefined结果时。
我的代码有什么问题?

4

1 回答 1

0

尽管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 };
  });
};

看起来您正在尝试异步调用多个函数并期望return从它们中获取值。那根本行不通。

于 2012-08-31T02:44:50.017 回答