2015-08-20 79 views
0

我正在重構使用Seq一些Node.js的代碼,並從文檔和this answer,我得到我使用this()就移動到下一個.seq(),但我如何傳遞一個變量到下一個.seq()「 s功能?如何使用Seq將變量傳遞給下一個.seq?

這是我到目前爲止已經試過:

$() 
.seq(function() { 
    User.findById(req.user._id, this); 
}) 
.seq(function(user) { 

    if (!user) { return res.json(400, {'user': 'User not found.'}); } 

    var data = req.body; 

    saveData(data, user, true); 

    this(); 

}) 
.seq(function(data) { 

    return res.json(data); 

}) 
.catch(next); 

第一.seq()向右移動沒有任何this()呼叫,但第二.seq()不會移動到下一個,除非我打電話this()。但是,在達到最後的.seq時,data現在爲undefined。因此,我嘗試這樣做:

[...] 

    saveData(data, user, true); 

    this(data); //Added "data" here 

[...] 

但是,相反,會導致錯誤(我一直無法追查什麼樣的錯誤呢,雖然,因爲它在某種程度上被髮送到設置ErrorHandler功能似乎隱藏了錯誤)。我應該怎麼做呢?

+0

鑑於'this'似乎是一個nodeback,嘗試'這個(空,數據)'。但是如果'saveData'完全不是異步的,那麼就沒有理由把'res.json(data)'放在自己的回調中。 – Bergi

+0

工作!沒有直接解決我的問題,但它導致了一條固定它的鏈條。 :)如果你把這個作爲答案,我會很高興接受它。 –

+0

done ...注意如果你自己找到了解決方案,你可以[自己發佈一個答案](http://stackoverflow.com/help/self-answer);特別是如果它更完整 – Bergi

回答

1

由於該回調不是異步的,因此沒有理由將其置於自己的seq調用中。只要做到

… 
.seq(function(user) { 
    if (!user) 
     return res.json(400, {'user': 'User not found.'}); 
    var data = req.body; 
    saveData(data, user, true); 
    return res.json(data); 
}) 

否則,如果你真的需要通過數據,this並堅持節點回調公約 - 第一個參數指定的錯誤,第二個是結果值。所以你必須通過null第一:

… 
this(null, data);