javascript - Promise 捕获问题

标签 javascript node.js promise

尝试在我的 Node.js 应用程序中使用 Promise。但遇到了麻烦。

catch() 是否可以获取 applicationObject(刚刚在 then() 中创建)?

如何将applicationObject传递给catch()

任何情况都可能引发错误 - 无论是在 execute() 范围内的应用程序中强制抛出异常,还是系统错误。

代码示例:

new Promise((resolve, reject) => {
    // Create applicationObject (used a Singleton pattern)
    let applicationObject = Application.getInstance();
    resolve(applicationObject);
})
.then(applicationObject => {
    // Working with applicationObject
    applicationObject.dbModel.beginTransaction();
    applicationObject.execute();
    applicationObject.dbModel.commit();
})
.catch(error => {
    // In any error case try to make some actions with this object
    // including rollback db changes
    applicationObject.dbModel.rollback(); // How to get applicationObject?
    ...
}

最佳答案

首先,如果它是单例,那么您只需在 catch 中调用 Application.getInstance() 即可,如果它正确实现,那么它应该没有额外的成本。

或者,只需在 Promise 之外创建它,例如

 let applicationObject = Application.getInstance();
 new Promise((resolve, reject) => {
   ...
 })
 .catch(err => {
   // applicationObject is accessible
 })

或者,如果它必须由 Promise 创建,那么只需在 Promise 之外创建 var,即

let applicationObject = null;
new Promise((resolve, reject) => {
  applicationObject = Application.getInstance();
  ...
})

关于javascript - Promise 捕获问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914984/

相关文章:

javascript - 在 Node JS 中获取、操作和编写(响应)巨大 JSON 的最佳方式?

javascript - res.render() 函数渲染 ejs 页面不会刷新 UI,但 ejs 页面会被调用

javascript - 等待所有步骤成功或失败的异步步骤

javascript - 不使用 jQuery 获取文本字段的当前值

javascript - 如何使用 annyang 语音命令更改我在 $scope 中声明的 AngularJS 变量?

mysql - 具有单个应用程序服务器实例的数据库连接池

javascript -//@sourceurl 在 firefox 中的脚本标签上

javascript - 为什么我的值在 promise 后返回未定义

javascript - 为什么我不能在已解决的 promise 上使用 then ?

javascript - AngularJs 发布请求获取错误