我一直想知道用 node.js 这样的语言来做这件事的最好方法是什么。Node 是异步的,但是如果我们必须进行 5 次调用才能继续执行程序呢?我正在整理一些东西来用 node.js 开始我的 dzen 并且必须获得输出大小。这就是我所拥有的:
var geo = require('child_process').exec("i3-msg -t get_outputs",
function(error, stdout, stderr) {
var out = JSON.parse(stdout);
doStuff(out[0].rect);
});
function doStuff(geom) {
// set up dzen
}
out[0].rect 是一个包含 x、y、宽度和高度的对象。
稍后我需要这些值,这是我唯一要做的调用,所以我不必担心。但是如果我不得不打更多电话怎么办?如果我需要进行大量调用,但仍然必须使用 node.js,该怎么办?我不喜欢这样的想法
var call1 = do.stuff('thing', function(data){
call2(data);
});
function call2(d1){
do.more.stuff('yeah', function(data){
call3(d1, data);
});
}
function call3(d1,d2){
...
function finallyDone(d1,d2,d3,d4,d5,d6){
// actually use the data now with 6 params
这是正确的方法,还是有更好的方法?我想我可以做类似的事情:
var d1, d2, d3, d4, d5;
var call1 = do.thing(stuff, function(data){
setd1(data);
});
function setd1(data){
d1 = data;
getd2();
}
...
function setd5(data){
d5 = data;
getd6();
}
function getd6(){
var sh = call.thing(stuff, function(data){
doProgram(data);
});
}
function doProgram(d6){
console.log(d1 + d2 + d3 + d4 + d5 + d6);
}
那行得通吗?全局变量通常不好?