1

举这个例子

var s;
cb = function(error,result){
s = result;
}
memcached.get('hellow',cb);
console.log(s);

这个给我undefined。我的代码有什么问题?

4

3 回答 3

1

变量s在回调函数中被初始化。只有当 memcached.get() 完成获取 'hellow' 的数据时,才会触发此回调函数。

Javascripty 依赖于事件循环机制。这意味着 javascript 运行时将继续执行脚本,直到它到达末尾,而不会阻止任何回调的发生。

因此,在您的示例中,javascript 运行时将执行console.log(s)memcached.get('hellow',cb)行之后立即行,而不会阻塞。因此,仅当cb在最后一行之前执行时,您的情况下的 console.log(s) 才会打印有效值(除undefined之外)。

请移行console.log(s)请在回调函数中

于 2012-09-02T16:11:17.440 回答
1

console.log(s);行在cb函数执行之前执行,因为直到可用时才cb调用。这是 node.js 中任何 I/O 操作都会发生的经典异步。memcached.getresult

于 2012-09-02T15:43:10.523 回答
1

您需要console.log在定义后执行,s因为它是异步的:

var s;
cb = function(error,result){
    s = result;
    console.log(s);
}
memcached.get('hellow',cb);
于 2012-09-02T15:46:51.680 回答