为什么在节点js的一个callback函数中为全局variables赋值以在控制台中返回undefined?
以这个例子
var s; cb = function(error,result){ s = result; } memcached.get('hellow',cb); console.log(s);
这给我undefined
。 我的代码有什么问题?
console.log(s);
行在cb
函数执行之前执行,因为cb
不会由memcached.get
调用,直到result
可用。 这是node.js中任何I / O操作发生的经典asynchronous性。
定义s
之后需要执行console.log
,因为它是asynchronous的:
var s; cb = function(error,result){ s = result; console.log(s); } memcached.get('hellow',cb);
variabless在callback函数中被初始化。 这个callback函数只有在memcached.get()完成获取“hellow”的数据时才会被触发。
Javascript依赖于事件循环机制。 这意味着,JavaScript运行时将继续执行脚本,直到到达最后而不阻塞任何callback发生。
因此,在你的例子中,javascript运行时会在行memcached.get('hellow',cb)之后立即执行console.log(s)行。 因此,只有在cb在最后一行之前执行的情况下,console.log(s)才会打印一个有效值(其他未定义 )。
请在callback函数中移动console.log(s)以获得更一致的结果。