done() 是否完成与 Javascript 承诺中的 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
中的所有failure/error消息?
编辑 - 我发现 sequelize
使用 bluebird 的 promise 库,因此 done()
已被删除 finally()
。但是,finally()
在函数中不带参数,所以我似乎无法将所有数据发送到 finally()
并在那里处理。
Native Promises 没有 .done()
方法。我建议坚持使用 ECMAScript spec 并只使用 .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
done()
已弃用,我建议您不要使用它 - 它的目标是将拒绝作为异常抛出,以便它传播。 Bluebird 自行跟踪未解决的承诺,因此 then
这样做并发出警告。
你不想想.catch(err => { /* handle */})
除非你真的有能力处理异常——就像catch (e) {
一样。如果您对异常没有任何有意义的事情,请不要做任何事情。
例如,在路线中,如果发生异常,您可以 return 一个 500
错误状态,并向您的工具和客户端报告一些事情。
finally()
主要用于 资源清理 并确保您将所有内容保持在干净状态。
我正在尝试让我的 Express 应用程序尽可能类似地处理所有请求。我有一台服务器,它通过回调处理所有事情,厄运金字塔太可怕了。也很难确保我对所有呼叫都发送了响应。
所以我正在迁移到基于 Promise 的系统(sequelize,它利用了 bluebird 的 promise 库)。
我读到,最好始终跟进 .catch(function(err){ report it }
电话。
.done()
是否完成了同样的事情?
我的想法(可能很天真)是我可以处理 .done(success, failure)
函数中的所有 res.status(x).send(y)
调用。
failure
会捕捉到 catch()
会捕捉到的一切吗?在done()
函数中发送所有响应是否错误(success
中的所有成功消息和failure
中的所有failure/error消息?
编辑 - 我发现 sequelize
使用 bluebird 的 promise 库,因此 done()
已被删除 finally()
。但是,finally()
在函数中不带参数,所以我似乎无法将所有数据发送到 finally()
并在那里处理。
Native Promises 没有 .done()
方法。我建议坚持使用 ECMAScript spec 并只使用 .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
done()
已弃用,我建议您不要使用它 - 它的目标是将拒绝作为异常抛出,以便它传播。 Bluebird 自行跟踪未解决的承诺,因此 then
这样做并发出警告。
你不想想.catch(err => { /* handle */})
除非你真的有能力处理异常——就像catch (e) {
一样。如果您对异常没有任何有意义的事情,请不要做任何事情。
例如,在路线中,如果发生异常,您可以 return 一个 500
错误状态,并向您的工具和客户端报告一些事情。
finally()
主要用于 资源清理 并确保您将所有内容保持在干净状态。