done()和Javascript promises中的catch()一样(使用sequelize和bluebird)吗
Does done() accomplish the same thing as catch() in Javascript promises (using sequelize and bluebird)?
我正试图使我的Express应用程序尽可能地处理所有请求。我有一个处理所有回调的服务器,而厄运金字塔非常糟糕。我也很难保证我给所有的电话都发了回复。
所以我迁移到一个基于Promise的系统(sequelize,它利用了bluebird的Promise库)。
我读到过,最好总是跟进.catch(function(err){ report it }
电话。
.done()
完成同样的事情吗?
我的想法(可能是天真的)是我可以处理.done(success, failure)
函数中的所有res.status(x).send(y)
调用。
failure
会捕获catch()
会捕获的所有内容吗?在done()
函数中发送所有响应(success
中的所有成功消息和failure
中的所有失败/错误消息)是错误的吗?
编辑-我发现sequelize
使用蓝鸟的承诺库,所以done()
已经被finally()
弃用。但是,finally()
在函数中不接受参数,所以我似乎不能将所有数据发送到finally()
并在那里处理它。
done()
已被弃用,我建议您不要使用它-它的目标是将拒绝作为异常抛出,以便它传播。Bluebird会自己跟踪未解决的承诺,所以then
会这样做并发出警告。
你做不想做.catch(err => { /* handle */})
,除非你真的有能力处理异常-就像catch (e) {
。如果你对异常没有任何有意义的处理,就不要做任何事情。
例如,在路由中,如果发生异常,您可以返回500
错误状态,并向您的工具和客户端报告一些内容。
finally()
主要用于资源清理,并确保您将所有内容保持在干净的状态。
原生承诺没有.done()
方法。我建议坚持使用ECMAScript规范,只使用.then(success).catch(failure)
,这将确保在success
函数中抛出的任何错误仍然会被failure
函数捕获和处理。
.finally(function() handler) -> Promise
函数略有不同。它被success
和failure
调用,但请注意,它没有获得任何数据作为handler
的参数。
用于清理,就像try...catch
中的普通finally
块一样。
如果你需要访问Promise返回的值,使用.then()
:
.then(
[function(any value) fulfilledHandler],
[function(any error) rejectedHandler]
) -> Promise
- 如何使用hasOne和sequelize.js引用两个表
- Sequelize:使用多个数据库
- 在创建时使用 Sequelize 保存时获取关联
- 使用Sequelize.js创建简单PUT请求时出错
- 使用 sequelize ORM 连接到节点上的 Amazon RDS Postgres 数据库.js出现问题
- 使用Sequelize.js findAll对连接表中的字段进行排序的正式和正确的语法
- 使用 sequelize 查找没有“modelB”组合实例的“modelA”的所有实例
- NodeJS - 创建一个使用 Sequelize 函数的 Promise 函数
- 当使用sequelize.js给一个id数组时进行多次删除
- 在单独的文件中使用Sequelize创建模型,并在项目中使用它们
- 无法使用Sequelize关联架构(postgresql)中的模型
- 使用sequelize连接SQL server失败
- 当使用sequelize.js中的构建方法时,我需要验证,消毒或转义数据吗?
- 使用sequelize获取下一条记录
- 如何使用Sequelize和Javascript返回查询结果?
- 使用Sequelize在列上使用datetime函数
- 在定义模型时,我应该使用Sequelize还是DataType ?
- 使用Sequelize通过object_2_object表获取相关数据
- done()和Javascript promises中的catch()一样(使用sequelize和bluebird)吗
- 使用sequelize (javascript ORM)编辑、加载数据表而不删除数据表(mysql)