2012-08-30 70 views
1

节点的memcached有一个功能get检索e.g memcachd键值:如何从node-memcached获取函数返回结果?

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

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

回答

0

虽然this看起来像一个变量,并且往往表现得像一个,但它不是一个真正的变量,因此在闭包中不像一个变量。当你有嵌套在另外一个功能,内在功能获得的this一个全新的版本,这是不太可能指向同样的事情外部函数的this

因此,如果您需要参考的外部函数的this内部函数里面,你必须首先将其复制到一个真正的变量(大多数人喜欢叫它self但有些人更喜欢that),然后是指该变量在内部功能。

在你的情况,但是,你已经有了一个真正的变量,即memcached,可以分配到,所以只是在回调memcached更换this。它是由回调创建的闭包的一个正确范围的外部变量(如可以在其中使用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从它们的值。这根本行不通。

+0

好吧,我使用初始化连接首先在'initial.js'调用'require'函数文件到该文件使用var'INIT',我尝试'INIT.mem​​cached.r = result'在内部功能和呼叫它外面,但没有工作太 –

+1

我不太清楚你在说什么,虽然这可能只是一个差的翻译问题。如果你能找到熟练掌握英语和母语的人,并且懂得编程,就可以尝试运行他/她所说的话,并张贴他们必须说的话。 – ebohlman

+0

对我可怜的郎很抱歉,但我会更清楚。在第一memcached的节点应该连接到memcached服务器然后做查询。什么我所做的就是写连接代码在一个名为'initial.js'然后创建一个名为文件'test.js'在这个文件我用'INIT =要求(“初始”)'使用使用'INIT.mem​​cached.get'其正常工作,如果我登录回调函数内的结果,但是当我尝试分配“通话result'参数后面的关键我memcahed连接和查询函数调用'INIT.mem​​cached.r',然后将其记录到'get'函数'undefined'结果之外。 –