node.js范围问题?

时间:2012-06-23 02:19:11

标签: node.js

我正在制作一个带有node.js的脚本,用于在i3中设置我的dzen2,并且之前没有真正使用过这样的节点。

我需要从屏幕的几何开始,我可以用这样的东西得到:

geometry = getGeo();

function getGeo() {
  var sh = require('child_process').exec("i3-msg -t get_outputs",
    function(error, stdout, stderr) {
      var out = JSON.parse(stdout);
      return out[0].rect; //this is the geometry, {"x":0, "y":0, "width":1280, "height":768}
  });
};

console.log(geometry);

console.log正在记录未定义。

我不确定这样做的正确方法是什么,我的大脑已经累了。

2 个答案:

答案 0 :(得分:3)

由于是异步,因此无法从回调函数返回。 而是编写另一个函数并将回调对象传递给它。

function getGeo() {
var sh = require('child_process').exec("i3-msg -t get_outputs",
    function(error, stdout, stderr) {
      var out = JSON.parse(stdout);
      getRect(return out[0].rect);
    });
};

function getRect(rect) {
    // Utilize rect here...
}

答案 1 :(得分:0)

你永远不会从getGeo()返回一个值,而是从其中的匿名函数返回一个函数。但由于.exec()调用的异步性质,您无法返回该值。您可以将console.log放入回调函数中,但这可能不是您想要在真实程序中使用它的地方。