res.end()会结束async.waterfall吗?

时间:2014-12-28 13:40:27

标签: javascript node.js asynchronous express

我有这段代码:

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();

异步会结束还是会使用来自计算机的资源永远等待回调?如果是的话,如何解决这个问题,因为我的代码和方式都是如此,对我来说非常清楚,我认为任何不同的东西都会让人感到困惑。

1 个答案:

答案 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