javascript - res.end() 是否结束 async.waterfall?

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

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

最佳答案

Will async ends or it will be waiting forever for a callback using resources from the machine?

是的,在您的中间工作函数中,当 something 为 true 时,您不会调用回调。在这种情况下,将发送响应,但 waterfall 将永远不会完成。您可以通过调用带有仅意味着“短路”的良性错误的回调来终止 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

关于javascript - res.end() 是否结束 async.waterfall?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27676936/

相关文章:

javascript - Nodejs 文件行数返回未定义

javascript - 是否真的可以将数据(回调)从 mpld3 传递到 ipython?

php - 将 Canvas 解码为数据 URL

javascript - 如何为 Node.js REST API 正确配置 Nginx?

node.js - Mongoose 按位置/索引更新数组中的项目

java - 我应该在每个服务方法上放置 @Async 以使我的应用程序完全支持 Spring 中的异步吗?

javascript - 新的 Yammer API 是否允许在没有 iframe 的情况下嵌入?

asp.net-mvc - 如何在 MVC 3 中正确进行长轮询

使用 BubbleWrap 的 RubyMotion 异步编程

javascript - express.static() 不提供非 "/"的路由器路径中公共(public)文件夹中的文件