Node.js:设置对异步/承诺错误的正确响应

Node.js:设置对异步/承诺错误的正确响应,node.js,express,asynchronous,exception-handling,promise,Node.js,Express,Asynchronous,Exception Handling,Promise,我需要一个非常简单的模式来捕获所有异步/承诺错误;以下方面的正常模式: app.use(function (err, req, res, next) { ... }); 不处理异步错误,我在任何地方都找不到任何工作模式 我所发现的非常有限: process.on('unhandledRejection', function (err, p) { ... }); 它是有限的,因为我没有req对象来做一些日志记录/回顾,也没有res对象来塑造我的响应 捕获异步/承诺异常的“捕获所有”的工

我需要一个非常简单的模式来捕获所有异步/承诺错误;以下方面的正常模式:

app.use(function (err, req, res, next) {
  ...
});
不处理异步错误,我在任何地方都找不到任何工作模式

我所发现的非常有限:

process.on('unhandledRejection', function (err, p) {
  ...
});
它是有限的,因为我没有
req
对象来做一些日志记录/回顾,也没有
res
对象来塑造我的响应


捕获异步/承诺异常的“捕获所有”的工作模式可能是什么?

如果您使用的是ES Promise,则可以使用Promise.all子句,如下所示:

var promise1 = Promise.resolve(3);
var promise2 = new Promise(function(){throw "some exception";});
var promise3 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3])
  .catch(function(err) {
    // log that I have an error, return the entire array;
    alert('A promise failed to resolve', err);
    return arrayOfPromises;
  })
  .then(function(values) {
    alert(values);
  });
这里的想法是创建一个服务或一个地方,您可以在其中发送承诺数组,并执行一般的“捕获”和“然后”处理。我认为,您甚至可以通过按照自己的意愿迭代承诺来获得例外列表


请参见

了解如何处理它。了解或了解如何在中使用承诺返回函数express@Bergi这两个答案都不提供“全部捕获”处理程序。@OferZelig答案提供了编写带有承诺的express Middleware的方法,以便您可以使用默认的“全部捕获”处理程序。它们可以很好地处理异步错误,您只需要触发错误回调。@Bergi但这是我的观点,我不想显式地触发
catch
等。我想让计划外错误冒泡出来表达,让它记录下来,并很好地向用户返回一个友好的错误,从一个集中的地方。这是一个边界。你应该扩展你的答案,在这里包含尽可能多的信息,并使用链接仅供参考。这并没有回答我需要的。我想要一个应用程序级的通吃机制。