This question already has answers here:
Is there a way to wrap an await/async try/catch block to every function?

(4个答案)


3年前关闭。




我正在使用Nodejs。

我有几秒钟后的要求。
但是我的中间件无法捕获错误,而uncaughtException可以。
router.all('/incaseoferror', async(req, res, next) => {

    const promise = await new Promise(function (resolve, reject) {
        setTimeout(function () {
            reject(new Error('this is a test err, the error-middleware NOT catch and it NOT OKAY'));
        }, 3000);
    });

  //  throw new Error('test error - the error-middleware catch it and that okay');
});

function clientErrorHandler(err, req, res, next) {

    console.log('in clientErrorHandler', err);
//but not catch the promise error!

});

process.on('uncaughtException', function (error) {

    // the error is catch here..
});

这是问题所在:
假设我具有另一个库的登录功能,这给了我一个希望。
该函数失败了,我无法在我的错误中间件中捕获该错误,以使用户响应该请求失败。
  • 我不想在每个中间件中添加try/catch。 (route ===中间件)
  • 我要使用异步/等待
  • 使用uncaughtException不能帮助我,因为我无法在路由中将响应返回给用户。

  • 那我该怎么办?有任何想法吗?

    最佳答案

    这应该对你有帮助

    await new Promise(function (resolve, reject) {
            setTimeout(function () {
                reject(new Error('this is a test err, the error-middleware NOT catch and it NOT OKAY'));
            }, 3000);
        })
    .catch((err) => {
        clientErrorHandler(err);
     });
    

    关于javascript - 中间件不会捕获等待的 promise 拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47486688/

    10-16 14:33