Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何从节点memcached get函数返回结果?_Node.js - Fatal编程技术网

Node.js 如何从节点memcached get函数返回结果?

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.

节点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
函数,然后用var
INIT
调用这个文件,我试着在内部函数中调用
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