使用ES7异步功能对Sequelize进行未处理的拒绝

时间:2015-08-06 19:21:32

标签: async-await sequelize.js ecmascript-7

获取Sequelize.js模型的ValidationFailed时遇到此错误:

  

未处理拒绝SequelizeValidationError:验证错误:登录不是有效的电子邮件

但只有在使用ES7 async函数时,才会出现此非处理拒绝,请参阅以下代码:

export async function create (req, res) {
  try {
    res.json({ admin : await Admin.create(req.body) });
  } catch (err) {
    const message = {
      Login : err.errors.map(error => error.message),
    };
    res.status(400).json({ error : 'ValidationFailed', message : message });
  }
}

但是,当我使用ES5承诺格式时,它不会抛出异常。

export function create (req, res) {
  Admin.create(req.body)
    .then(admin => {
      res.json({ admin : admin });
    }, err => {
      const message = {
        Login : err.errors.map(error => error.message),
      };
      res.status(400).json({ error : 'ValidationFailed', message : message });
    });
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

To wait for a promise to resolve with async functions, you need to use the await keyword.

export async function create (req, res) {
  try {
    await res.json({ admin : await Admin.create(req.body) });
 // ^^^^ very important to include
  } catch (err) {
    const message = {
      Login : err.errors.map(error => error.message),
    };
    res.status(400).json({ error : 'ValidationFailed', message : message });
  }
}

The error is no longer in scope without the async keyword, and becomes an unhandled exception.