【问题标题】:await always thows SyntaxError: await is only valid in async function in sequelize [duplicate]等待总是抛出 SyntaxError:等待仅在 sequelize 的异步函数中有效 [重复]
【发布时间】:2021-01-14 17:48:11
【问题描述】:

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)。
当然,使用 async 和 await 也可以正常工作。

【问题讨论】:

  • 方法返回承诺,这是真的,但问题是函数 你有 await 的地方必须是 async function (或异步箭头函数 async () => {} )。它实际上必须有async 字。

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


【解决方案1】:

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

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

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

记得在 await 之前声明 async 或者如果你不想声明 async await 可以使用 promise

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

【讨论】:

  • 谢谢,这确实解决了我的问题。
【解决方案2】:

你必须像这样使用异步函数

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 时,async 是必需的,它只会在异步函数类型中使用

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2019-10-19
    相关资源
    最近更新 更多