node.js中的许多异步调用?

时间:2012-06-23 03:47:00

标签: 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);
    doStuff(out[0].rect);
});

function doStuff(geom) {
// set up dzen
}

out [0] .rect是一个包含x,y,width和height的对象。

我稍后需要这些值,这是我必须做的唯一一个电话,所以我不必担心它。但是,如果我不得不打电话怎么办?如果我需要做很多调用,仍然必须使用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);
}

那会有用吗?全局变量通常都很糟糕?

1 个答案:

答案 0 :(得分:1)

我的朋友想要使用名为Async的库。 https://github.com/caolan/async

它允许您将异步请求与关于如何使应用程序运行的各种选项链接起来:)

https://github.com/caolan/async#control-flow-1是您想要查看示例的地方:)