如何在Node.js中跟踪相应请求的响应对象

时间:2013-04-02 07:04:58

标签: node.js asynchronous

我在Node.js中编写应用程序我需要一些建议。

我收到客户的POST请求。收到请求后,我调用了一些函数。在执行结束时,我需要回复使用HTTP响应发起请求的客户端。问题是:

  1. 我在异步接收请求后调用了很多函数。如何追溯到请求的相应响应对象。
  2. 我是否需要继续将其传递给后续的函数调用。
  3. 我何时决定调用response.end()。由于它是异步函数调用,我不确定哪个是最后一个函数调用。
  4. 我该如何解决?我能获得一些建筑建议吗?

1 个答案:

答案 0 :(得分:0)

听起来您希望使用类似async库的内容来处理异步任务(async.seriesasync.parallel听起来合适)。

这样,您可以对所有异步任务进行“分组”,并在完成所有任务后调用一个回调。从该回调中,您可以处理您的回复:

app.post('/your/route', function(req, res) {
  async.parallel([
    // start your tasks (called 'task1', 'task2', and pass the 'async' callback
    // to them; once a task is done, it needs to call the callback)
    function(cb) { task1(cb); },
    function(cb) { task2(cb); },
    ...
  ], function(err, results) {
    if (err)
      // handle error
    else
      res.send('tasks done'); // or whatever you want to send back
  });
});

(取决于您的任务签名,您可以使用async.apply而不必为每项任务创建新功能)

传递响应对象并不是一个好主意,因为 - 如果我理解正确 - 您的任务本身不必生成响应。