done()完成与Javascript承诺中的catch()完全相同的事情(使用sequelize和bluebird)?

我试图让我的Express应用程序尽可能相似地处理所有请求。 我有一个服务器,处理所有的callback和厄运金字塔是可怕的。 我也很难确保所有的电话都有回应。

所以我正在迁移到基于Promise的系统(sequelize,它利用蓝鸟的承诺库)。

我读过最好总是跟进一个.catch(function(err){ report it }调用。

.done()完成相同的事情?

我的想法(可能是天真的)是,我可以在.done(success, failure)函数中处理所有res.status(x).send(y)调用。

failure抓住一切catch()会(? 在done()函数中发送所有响应是否错误(所有成功消息都success ,所有失败/错误消息failure

编辑 – 我发现sequelize使用蓝鸟的诺言库,所以done()已被depricted finally() 。 但是, finally()没有在函数中使用参数,所以似乎我不能将所有数据发送到finally()并在那里处理它。

done()已被弃用,我build议你不要使用它 – 它的目标是把拒绝作为一个exception来传播。 蓝鸟自己跟踪未解决的承诺, then这样做,并警告无论如何。

你不想做.catch(err => { /* handle */})除非你真的有能力处理exception – 就像catch (e) { 。 如果你没有任何有意义的事情做例外,不要做任何事情。

例如,在路由中,如果发生exception,则可以返回500错误状态,并向您的工具和客户端报告某些内容。

finally()主要用于资源清理 ,并确保您将所有内容保留在干净的状态。

Native Promises没有.done()方法。 我会build议坚持使用ECMAScript规范 ,只使用.then(success).catch(failure)这将确保可能在您的success函数中引发的任何错误仍然被捕获并由您的failure函数处理。

.finally(function() handler) -> Promise函数略有不同。 它被successfailure调用,但注意到它没有得到任何数据作为handler的参数。

它的目的是用于清理,就像一个正常的try...catch finally块。

如果您需要访问Promise返回的值,请使用.then()

 .then( [function(any value) fulfilledHandler], [function(any error) rejectedHandler] ) -> Promise