我正在制作一个带有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正在记录未定义。
我不确定这样做的正确方法是什么,我的大脑已经累了。
答案 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放入回调函数中,但这可能不是您想要在真实程序中使用它的地方。