等待总是抛出 SyntaxError:等待仅在 sequelize 的异步函数中有效 [重复]

Posted

技术标签:

【中文标题】等待总是抛出 SyntaxError:等待仅在 sequelize 的异步函数中有效 [重复]【英文标题】:await always thows SyntaxError: await is only valid in async function in sequelize [duplicate] 【发布时间】: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 字。 【参考方案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 是必需的,它只会在异步函数类型中使用

【讨论】:

以上是关于等待总是抛出 SyntaxError:等待仅在 sequelize 的异步函数中有效 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在异步函数中等待多个等待调用?

SyntaxError:在使用gzip提供文件时,仅在firefox中抛出非法字符

SyntaxError:异步函数中出现意外的保留字“等待”

SyntaxError:“等待”外部函数,即使它在异步内部

Vue 在使用前等待来自 props 的数据

WCF 仅在满足特定条件时调用方法,否则等待