2013-04-02 44 views
0

我在Node.js中編寫應用程序我需要一些建議。如何在Node.js中跟蹤相應請求的響應對象

我從客戶端收到POST請求。收到請求後,我會調用一些函數。在執行結束時,我需要使用HTTP響應回覆發起請求的客戶端。問題是:

  1. 我在異步接收請求後調用了很多函數。如何追溯到請求的相應響應對象。
  2. 我是否需要繼續將它傳遞給後續的函數調用。
  3. 什麼時候我會決定調用response.end()。因爲它是異步函數調用,所以我不確定哪個是我最後的函數調用。

我該怎麼辦?我可以得到一些建築建議嗎?

回答

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,而不必爲每個任務的新功能)

各地傳遞響應對象聽起來不是一個好主意,因爲 - 如果我理解正確 - 你的任務不需要自己產生響應。

+0

情景是,我不寫內聯函數。我從另一個.js文件調用函數。那麼我需要保持傳遞響應對象嗎? – Gaurav

+0

不,你可以只需要這些功能。但最後,你仍然需要傳遞迴調函數來告訴'async'你的函數已經完成(但是幾乎在任何異步工作流中都會出現這種情況,除非你使用類似Promise的東西)。 – robertklep

相關問題