【问题标题】:Does res.end() ends async.waterfall?res.end() 是否结束 async.waterfall?
【发布时间】:2014-12-28 13:40:26
【问题描述】:

我有这个代码:

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

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

【问题讨论】:

    标签: javascript node.js asynchronous express


    【解决方案1】:

    异步会结束还是会永远等待使用机器资源的回调?

    是的,在你的中间工作函数中,当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

    【讨论】:

      猜你喜欢
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2011-05-23
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      相关资源
      最近更新 更多