2015-08-20 39 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);