我继承了一些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调用中的所有函数都在返回结果之前。我该怎么做?
答案 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);
除非您没有尝试等待异步事件发生的问题,否则您无法做到这一点,而没有奇怪的逻辑。