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正在logging未定义。

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

你不能从callback函数返回,因为是asynchronous的。 而是编写另一个函数,并将callback对象传递给它。

 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... } 

你永远不会从getGeo()返回一个值,你从它内部的匿名函数返回一个函数。 但由于.exec()调用的asynchronous性质,您不能返回值。 你可以把console.log放到callback函数中,但是这可能不是你想要在真实程序中使用它的地方。