我有一个复杂的异步回调链,并且在链中的任何时候,如果有错误,我都想用错误消息来呈现一个Jade模板。
在下面的功能partnerErr中,是否可以使用没有原始响应对象的模板进行响应?
app.post('/dashboard/partners/create', function (req, res) {
console.log( req.body );
ParseUtils.doesUserExist(
req.body.partnerEmail,
function() { ShopifyUtils.doesPartnerExist( req.body.partnerShopSlug,
function() { ParseUtils.createUser( req.body,
function() { ShopifyUtils.createPartner( req.body,
res.send( ' all good. parse and shopify passed. user created. '),
partnerErr
); },
partnerErr
); },
partnerErr
);
},
partnerErr
);
});
function partnerErr(err) {
console.log( 'rendering partner error' );
app.render('admin/partnersCreate', { error : err }, function(err, html) {
console.log('html', html);
});
}
最佳答案
首先,我将研究https://github.com/caolan/async来清理您的一系列异步调用。这么多嵌套几乎是不可读的。看起来series
或waterfall
可以满足您的需求。这也将大大减少您编写partnerErr
并将所有错误检查逻辑移到一个位置所需的次数。
话虽这么说,为什么不将res
传递给partnerErr
并使用res.render
?我是否正确理解您的问题?
更新
我强烈建议您考虑像上面所说的那样重写它,但是,如果您想不理会它,可以执行以下操作:
app.post('/dashboard/partners/create', function(req, res) {
console.log(req.body);
ParseUtils.doesUserExist(
req.body.partnerEmail,
function() {
ShopifyUtils.doesPartnerExist(req.body.partnerShopSlug,
function() {
ParseUtils.createUser(req.body,
function() {
ShopifyUtils.createPartner(req.body,
res.send(' all good. parse and shopify passed. user created. '),
partnerErr(res)
);
},
partnerErr(res)
);
},
partnerErr(res)
);
},
partnerErr(res)
);
});
function partnerErr(res) {
return function(err) {
console.log('rendering partner error');
res.render('admin/partnersCreate', {
error: err
});
}
}
另一个选择是将
partnerErr
函数移到与app.post
相同的作用域中,并且仅可以访问res
变量。我不确定partnerErr
的解耦是否仅基于此片段。关于javascript - 渲染没有响应对象的Jade View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23034965/