Node.js await always thows SyntaxError:await仅在sequelize的异步函数中有效
Ubuntu 20Node.js await always thows SyntaxError:await仅在sequelize的异步函数中有效,node.js,async-await,sequelize.js,Node.js,Async Await,Sequelize.js,Ubuntu 20 节点12.18.4 NPM 6.14.6 续集6.3.5 我遵循官方指南,现在很困惑。 成功配置Sequelize并连接后,我尝试运行(从官方文档) 它抛出SyntaxError:await仅在异步函数中有效 在官方的入门页面下,它明确指出: Sequelize提供的大多数方法都是异步的,因此返回承诺。它们都是承诺,因此您可以开箱即用地使用承诺API(例如,使用then、catch、finally)。 当然,使用async和await也可以正常工作 您必须像这样使用异步函数
节点12.18.4
NPM 6.14.6
续集6.3.5 我遵循官方指南,现在很困惑。
成功配置Sequelize并连接后,我尝试运行(从官方文档) 它抛出
SyntaxError:await仅在异步函数中有效
在官方的入门页面下,它明确指出:
Sequelize提供的大多数方法都是异步的,因此返回承诺。它们都是承诺,因此您可以开箱即用地使用承诺API(例如,使用then、catch、finally)。当然,使用async和await也可以正常工作
您必须像这样使用异步函数
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);
});
}
当您想在应用程序中使用wait时,async是必需的。它将仅在async函数类型中使用,这意味着如果您必须等待,您需要在函数中声明一个异步外部函数:
async function() {
await sequelize.authenticate();
}
或
记住在wait之前声明async,或者如果不想声明async wait,可以使用承诺
const nameYourFunction = () => {
sequelize
.authenticate()
.then((result) => {
console.log('nameYourFunction -> result', result);
})
.catch((error) => {
console.log('nameYourFunction -> error', error);
});
};
方法返回承诺,这是正确的,但问题是,具有
await
的函数必须是async函数(或异步箭头函数async()=>{}
)。它必须有async
这个词。谢谢,这确实解决了我的问题。
const nameYourFunction = async () => {
await sequelize.authenticate();
}
const nameYourFunction = () => {
sequelize
.authenticate()
.then((result) => {
console.log('nameYourFunction -> result', result);
})
.catch((error) => {
console.log('nameYourFunction -> error', error);
});
};