以此为例
var s;
cb = function(error,result){
s = result;
}
memcached.get('hellow',cb);
console.log(s);
这给了我undefined
。我的代码出了什么问题?
答案 0 :(得分:1)
console.log(s);
行在cb
函数执行之前执行,因为cb
在memcached.get
可用之前不会result
调用{{1}}。这是node.js中任何I / O操作发生的经典异步性。
答案 1 :(得分:1)
您需要在定义console.log
后执行s
,因为它是异步的:
var s;
cb = function(error,result){
s = result;
console.log(s);
}
memcached.get('hellow',cb);
答案 2 :(得分:1)
变量 s 正在回调函数中初始化。只有当memcached.get()完成获取'hellow'的数据时,才会触发此回调函数。
Javascript依赖于事件循环机制。这意味着javascript运行时将继续执行脚本,直到它到达结尾而不会阻止任何回调发生。
在您的示例中,javascript运行时将在行 memcached.get('hellow',cb)之后立即执行 console.log(s)行没有阻止。因此,只有在 cb 在最后一行之前执行时,您案例中的console.log才会打印有效值(未定义除外)。
请在回调函数中移动 console.log(s)行以获得更一致的结果。