1

我正在使用 node.js 制作一个脚本,用于在 i3 中设置我的 dzen2,并且之前还没有真正使用过 node 来做类似的事情。

我需要从屏幕的几何形状开始,我可以通过以下方式获得:

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 正在记录未定义的日志。

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

4

2 回答 2

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...
}
于 2012-06-23T02:28:29.303 回答
0

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

于 2012-06-23T02:20:25.520 回答