Node.js 如何从节点memcached get函数返回结果?
节点memcached有一个函数Node.js 如何从节点memcached get函数返回结果?,node.js,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.
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
函数未定义的结果时发生。
我的代码出了什么问题?虽然这个看起来像一个变量,而且经常表现得像一个变量,但它不是真正的变量,因此在闭包中表现得不像一个变量。当一个函数嵌套在另一个函数中时,内部函数会得到一个全新版本的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 };
});
};
看起来您正在尝试异步调用多个函数,并希望从它们返回一个值。那根本不行。好的,我先在initial.js
文件中使用initialize connection调用require
函数,然后用varINIT
调用这个文件,我试着在内部函数中调用INIT.memcached.r=result
,然后在外部调用它,但不太清楚你在说什么,虽然这可能只是翻译不好的问题。如果你能找到一个精通英语和你的母语,并且懂编程的人,试着把你说的话传给他/她,然后把他们要说的话发出去。很好,对不起,我可怜的朗,但我会说得更清楚。在节点memcached中,首先应该连接到memcached服务器,然后执行查询。我所做的是在名为initial.js的文件中编写连接代码,然后在我使用的文件中创建名为test.js
的文件中使用INIT=require('initial'))
使用我的memcahed连接并使用INIT.memcached.get
查询一个键,如果我在回调函数中记录结果,但当我尝试将回调函数的'result'参数分配给INIT.memcached.r
时,会在get
函数未定义的
结果之外记录它。我认为是这样的如果你再展示一些你的代码会有所帮助。另外,您使用的是哪个特定的memcached
模块(周围似乎有很多)?很好,这是我用于NodeJS的memcached