res.end() 是否结束了 async.waterfall

Does res.end() ends async.waterfall?

本文关键字:结束了 async waterfall 是否 end res      更新时间:2023-09-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();

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

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

是的,在您的中间工作线程函数中,当 something 为 true 时,您永远不会调用回调。在这种情况下,将发送响应,但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