我有一个复杂的异步回调链,并且在链中的任何时候,如果有错误,我都想用错误消息来呈现一个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来清理您的一系列异步调用。这么多嵌套几乎是不可读的。看起来serieswaterfall可以满足您的需求。这也将大大减少您编写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/

10-12 01:12