Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Node.js中同步处理方法_Node.js_Async.js - Fatal编程技术网

在Node.js中同步处理方法

在Node.js中同步处理方法,node.js,async.js,Node.js,Async.js,我继承了一些Node.js代码,需要添加一些功能。然而,由于节点的异步性质,我不确定如何在语法上实现我的目标。目前,我有一个定义如下的函数: return { myEntryPoint: function(req, res) { var results = getResults(); res.send(200, results); } }; var getResults = function() { var results = []; async.series(

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

return {
  myEntryPoint: function(req, res) {
    var results = getResults();
    res.send(200, results);
  }
};
var getResults = function() {
  var results = [];
  async.series([
    function(callback) {
      // add to results
    },

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

  return results;
};
已有多个部件正在调用此函数。在其中,我调用了一个名为getResults的函数,其定义如下:

return {
  myEntryPoint: function(req, res) {
    var results = getResults();
    res.send(200, results);
  }
};
var getResults = function() {
  var results = [];
  async.series([
    function(callback) {
      // add to results
    },

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

  return results;
};

我的问题是,在返回结果之前,我需要等待async.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);
        });
    }
};

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

results = getResults(args);
someFunction(results);
相当于

function getResults(args, callback) {
    var results;
    //do stuff and populate results.
    callback(results);
}
getResults(args, someFunction);
除非你不存在等待异步发生的问题,如果没有奇怪的逻辑,你就无法做到这一点