是Node JS的新手,并且正在使用异步瀑布。
var methods = function (req, res) {
async.waterfall([
func1(req, res),
func2,
func3
], mainCallback);
};
app.get("/create", function(request, response)
{
methods(request, response);
});
function func1 (something, res, callback) {
if(something == 0)
{
callback (null, res, somethingelse);
}
else
{
mainCallback("success");
}
}
function func2 (something, res, callback) {
callback (null, res, somethingmore);
}
function func3 (something, res, callback) {
callback (null, res, somethingmore);
}
function mainCallback (error, success)
{
if (error)
{
console.log("error");
}
if(success)
{
//console.log("success");
}
}
在上面的流程中,能够跳至带结果的主回调,但无法向主回调发送更多参数。
例如,如果我想从主回叫发送响应,那么如何从func1将其作为参数发送呢?
我在func1中尝试了以下操作,但没有用
mainCallback("success", response)
请让我知道如何跳过方法func2和func3。还发送响应作为主要Allback的参数。
最佳答案
不要使用返回/抛出错误来控制执行流程,这是代码的味道。
而是按以下方式重构代码:
function mainCallback(err, res) {
if (err) {
console.log(err);
} else {
console.log(res);
}
}
function routeHandler(req, res) {
func1(req, res, function(err, res) {
if (res.something === 0) {
async.waterfall([
func2,
func3
], mainCallback)
} else {
mainCallback(null, 'success')
}
})
}
app.get('/create', routeHandler());
请注意,在调用
mainCallback
时,我将第一个值传递为null
,这样做是为了遵守错误约定,因此,在调用mainCallback且第一个参数具有一个值时,我确定它是错误的,否则第二个参数应包含结果。同样,这将使您的代码更易读和更容易理解,因为您在
if
中显式具有func1
分支。我建议也阅读以下内容:http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js/