如何从node-memcached get函数返回结果?

时间:2012-08-30 07:14:18

标签: node.js

节点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.rget函数undefined结果时。 我的代码出了什么问题?

1 个答案:

答案 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 }; }); }; 来自它们的值。这根本行不通。

相关问题