await总是低吼SyntaxError:await仅在sequelize中的异步函数中有效

时间:2020-09-29 06:36:28

标签: node.js async-await sequelize.js

Ubuntu 20
节点12.18.4
NPM 6.14.6
续集6.3.5

我遵循了官方指南,现在很困惑。
成功配置 Sequelize 并连接后,我尝试运行(根据官方文档)

await sequelize.authenticate();

它抛出SyntaxError: await is only valid in async function

在官方入门页面https://sequelize.org/master/manual/getting-started.html下,它明确指出:

Sequelize提供的大多数方法都是异步的,因此返回Promises。它们都是Promises,因此您可以立即使用Promise API(例如,使用then,catch,finally)。
当然,使用异步和等待也可以正常工作。

2 个答案:

答案 0 :(得分:0)

您必须使用这样的异步功能

getStateById: async (req, res) => {
              ^^^^^^

    sequelize.sequelize.transaction(async (t1) => {

        let state = await sequelize.state.findOne({
            where: {
                id: req.params.id
            }
        });

        let result = error.OK;
        result.data = state;

        logger.info(result);
        return res.status(200).send(result);
    }).catch(function (err) {
        logger.error(err);
        return res.status(500).send(error.SERVER_ERROR);
    });
}

当您要在应用中使用await时,异步是必需的,它将仅在异步函数类型中使用

答案 1 :(得分:0)

这意味着在您的函数中,如果必须等待,则需要声明一个异步外部函数:

async function() {
     await sequelize.authenticate();
}

const nameYourFunction = async () => {
     await sequelize.authenticate();
}

请记住在等待之前声明异步,否则,如果您不想声明异步等待,可以使用诺言

const nameYourFunction = () => {
  sequelize
    .authenticate()
    .then((result) => {
      console.log('nameYourFunction -> result', result);
    })
    .catch((error) => {
      console.log('nameYourFunction -> error', error);
    });
};