我有这段代码:
async.waterfall([
function (callback){
//some work
},
function (callback){
if(something)
res.status(200).send('Some message').end();
else
callback(null);
},
function (callback){
//some work
}
], function(err){
//Do something here...
});
我想知道我是否可以这样做:
res.status(200).send('Some message').end();
异步会结束还是会使用来自计算机的资源永远等待回调?如果是的话,如何解决这个问题,因为我的代码和方式都是如此,对我来说非常清楚,我认为任何不同的东西都会让人感到困惑。
答案 0 :(得分:2)
异步会结束还是会使用来自机器的资源永远等待回调?
是的,在您的中间工作人员功能中,当something
为真时,您不会调用回调。在这种情况下,将发送响应,但waterfall
将永远不会完成。您可以通过调用带有良性错误的回调来终止瀑布,这意味着只有"短路",或者您可以使用成功值来调用它,这也意味着短路(可能更清晰)。
async.waterfall([
function (callback){
//some work
},
function (callback){
if(something)
res.status(200).send('Some message').end();
callback(null, true); //true means "short circuit"
else
callback(null);
},
function (shortCircuit, callback){
if (shortCirtcuit) {
callback(null, true);
return;
}
//some work
}
], function(err){
//Do something here...
});
res.send('Some message');
会这样做。 200是默认状态,send
表示end
。