promise 向外部抛出异常

发布于 2022-09-04 12:33:06 字数 554 浏览 12 评论 0

最近刚接触sequelize;模型中存在表单验证,自定义表单验证是通过自定义方法;并当条件判断失败是抛出异常,我想自定义一个验证数据唯一性的方法,而sequelize方法又是通过promise的,没办法向外抛出异常。请问如何解决。

我想要的结果,如下代码:

function only(val) {
    co(function* () {
        var count = yield Account.count({
            where: {nick: val}
        });

        console.log('数据')
    }).catch(function (e) {
        console.log(e)
        // 这里继续 throw
    });
    
    // 我想要的结果是让 only 抛出方法异常。
}

try {
    // 执行这个方法, 抛出异常
    only('123')
} catch (e) {
    // 最终在这里获取异常
    console.log(e)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜心 2022-09-11 12:33:06

你也许并不是需要解决 Promise 抛出异常的问题,应该是如何使用 Promise 的问题:

  • 你可以使用 Koa@1 ,它本身支持 generator (如果你用的就是 Koa 那你的使用方式是错的)

  • 如果用 Express 可以用 async/await

  • 如果用 Koa@2 也需要用 async/await

你可以读一下阮老师的文章:http://es6.ruanyifeng.com/#do...


sequelize 的 validate 是支持 Promise 的,所以可以这样:

const Account = sequelize.define('Account', {
  // ...
}, {
  validate: {
    only(val) {
      return this.count({
        where: {
          nick: val
        }
      }).then(count => {
        if (count === 1)
          return Promise.resolve();
        else
          return Promise.reject(new Error('some errors'));
      });
    }
  }
});

但是如果只是校验唯一性最好用数据库 unique 来做

徒留西风 2022-09-11 12:33:06

var co = require("co");

function only(val) {

return co(function* () {
    try {
        throw ("eeee");
    } catch (err) {
        throw (err);
    }
})

// 我想要的结果是让 only 抛出方法异常。

}

co(function* () {

try {
    // 执行这个方法, 抛出异常
    yield only('123');
    //console.log(aa == 'eeee')
} catch (e) {
    // 最终在这里获取异常
    console.log(e)
}

})

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文