2

Sequelize.js モデルの ValidationFailed を取得すると、次のエラーが発生します。

未処理の拒否 SequelizeValidationError: 検証エラー: ログインは有効な電子メールではありません

ただし、この未処理の拒否は、ES7async関数を使用している場合にのみ発生します。次のコードを参照してください。

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 promise 形式を使用すると、例外がスローされません。

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 });
    });
}

何か案は?

4

1 に答える 1

0

promise が async 関数で解決されるのを待つには、awaitキーワードを使用する必要があります。

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 });
  }
}

asyncエラーは、キーワードなしでは範囲外になり、未処理の例外になります。

于 2015-08-07T02:26:36.187 に答える