node.js中有很多异步调用吗?

node.js中有很多异步调用吗?,node.js,asynchronous,Node.js,Asynchronous,我一直在想,使用node.js这样的语言,最好的方法是什么。节点是异步的,但如果我们必须进行5次调用才能继续执行程序呢?我正在用node.js组装一些东西来启动我的dzen,并且必须获得输出大小。以下是我的建议: var geo = require('child_process').exec("i3-msg -t get_outputs", function(error, stdout, stderr) { var out = JSON.parse(stdout); doSt

我一直在想,使用node.js这样的语言,最好的方法是什么。节点是异步的,但如果我们必须进行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);
}

这样行吗?但是全局变量通常是不好的?

我的朋友可能想使用一个名为Async的库

它使您可以将异步请求与有关应用程序行为的各种选项链接在一起:)


这是您想要查看示例的地方:)

tehlulz建议使用Async(或类似的东西;在“控制流库”下搜索)是一个很好的建议。但是,请注意,在node.js中,在函数外部声明的变量实际上是模块范围的,而不是全局的;很明显,如果你把所有的东西都写在一个大模块中,你就失去了这个优势,但是如果你正确地模块化,你应该不会有问题(你所需要的每个模块在概念上都包装在一个即时函数调用中,给它一个私有的名称空间)。我可以处理的模块范围。谢谢