繁体   English   中英

通过承诺链中的引用函数传递值?

[英]Pass values from referenced function in promise-chain?

我正在为Express应用程序编写一些渲染代码,我希望捕获错误,然后在函数render中输出它们,但是我不确定如何将它们从一种方法转移到另一种方法。

app.get('/user/makeRider', auth,
    (req, res, next) => {
        req.user.user.makeRider(req.query)
            .catch(error)
            .then(render(req, res));
    }
);

var render = (req, res) => {
    var response = {
        params: req.query,
        user: req.user.fulluser
    };
    res.json(response);
},
error = (reason) => {
    reason.errors.forEach((error) =>{
        console.log(error);
    });
    return;
};

一个快速但可能不是最优雅的解决方案是将错误作为参数添加到渲染函数中,然后您可以执行以下操作:

app.get('/user/makeRider', auth,
    (req, res, next) => {
        req.user.user.makeRider(req.query)
            .catch((reason)=>{
             render(req, res, reason.errors)
            })
            .then(render(req, res));
    }
);

var render = (req, res, errs) => {
    var response = {
        params: req.query,
        user: req.user.fulluser
    };
    res.json(response);
};

您可以将错误函数用作链中的最后一个中间件,只需将请求传递给下一个链:

var render = (req, res) => {
    var response = {
        params: req.query,
        user: req.user.fulluser
    };
    res.json(response);
}

app.get('/user/makeRider', auth,
    (req, res, next) => {
        req.user.user.makeRider(req.query)
            .catch(next)
            .then(render(req, res));
    }
);

app.use((reason, req, res, next) => {
    res.send(reason.errors);
    // or you can send them as json: res.status(404).json({errors: reason.errors})
});

当心代码中的提升问题,变量声明会提升到顶部,但从路由访问它们时,它们的分配,错误和渲染功能可能未定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM