在Node.js中同步处理方法

时间:2014-06-17 12:11:39

标签: node.js async.js

我继承了一些Node.js代码,我需要添加一些功能。但是,由于Node的异步特性,我不确定语法上如何实现我的目标。目前,我有一个如下定义的函数:

return {
  myEntryPoint: function(req, res) {
    var results = getResults();
    res.send(200, results);
  }
};

有几件人已经调用了这个功能。在其中,我正在调用一个名为getResults的函数,其定义如下:

var getResults = function() {
  var results = [];
  async.series([
    function(callback) {
      // add to results
    },

    function(callback) {
      // add to results
    }
  ]);

  return results;
};

我的问题是,我需要等到async.series调用中的所有函数都在返回结果之前。我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以更改它以添加回调。 Series有一个可选的回调函数,一旦所有函数都在其中完成,就会运行。

var getResults = function(finished) {
    var results = [];
    async.series([
        function(callback) {
            // add to results
        },

        function(callback) {
            // add to results
        }
    ], function() {
        //Called when series is finished
        finished(results);
    });
};

要获得结果,

return {
    myEntryPoint: function(req, res) {
        getResults(function(results) {
            res.send(200, results);
        });
    }
};

答案 1 :(得分:0)

处理此问题的常用方法是使用有问题的参数进行回调。

results = getResults(args);
someFunction(results);

相当于

function getResults(args, callback) {
    var results;
    //do stuff and populate results.
    callback(results);
}
getResults(args, someFunction);

除非您没有尝试等待异步事件发生的问题,否则您无法做到这一点,而没有奇怪的逻辑。