等待总是抛出 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 的异步函数中有效 [重复]的主要内容,如果未能解决你的问题,请参考以下文章