关于node.js范围的混淆

时间:2014-06-30 03:45:16

标签: javascript node.js

我正在使用node-mpdsocket库为节点编写mpd(音乐播放器守护程序)的客户端,但我似乎在早期遇到了一些混乱。在此示例中,response是一个对象,response['state']应该返回一个字符串。

var togglePause = function() {
  var mpdState;

  mpd.send('status', function(response) {
    mpdState = response.state;

    // Here, console.log(mpdState) returns mpd's state correctly
    console.log(mpdState);
  });

  // Here, undefined is returned regardless of mpd's actual state
  console.log(mpdState);
}

我希望mpdState在两个实例中都返回一个字符串,因为调用console.log的两个地方都在同一个函数中。但是,情况似乎并非如此。

1 个答案:

答案 0 :(得分:1)

传递给mpd.send的回调正在异步调用。因此,在回调运行之前调用第二个console.log语句。回调中的console.log语句具有正确的值,如您所见。

您正在运行的代码按预期运行。