我一直在尝试找出如何使sequelize与“async”和“await”一起工作。 我能找到的关于该主题的最佳信息是此线程中的答案: Node.js 7 how to use sequelize transaction with async / await?
但我无法让它在我的项目中发挥作用。我已经删除了部分代码以使其更简单,这样我就可以找出到底哪里不正确,最终得到如下结果:
const Sequelize = require('sequelize');
const sequelize = new Sequelize('zas', 'zas', 'saz123',
{
host: 'someHost',
dialect: 'mysql',
}
);
//test
let transaction;
var SimpleInspectionModel = require('../models/simpleInspectionModel.js')(sequelize, { dataTypes: Sequelize.DataTypes } );
try {
// get transaction
transaction = await sequelize.transaction();
// step 2
await SimpleInspectionModel.find({}, {transaction});
// commit
await transaction.commit();
} catch (err) {
// Rollback transaction if any errors were encountered
await transaction.rollback();
}
每当运行时,此代码都会输出此类错误:
transaction = await sequelize.transaction(); ^^^^^
SyntaxError: await is only valid in async function
at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:616:28) at Object.Module._extensions..js (module.js:663:10) at Module.load (module.js:565:32) at tryModuleLoad (module.js:505:12) at Function.Module._load (module.js:497:3) at Function.Module.runMain (module.js:693:10) at startup (bootstrap_node.js:191:16) at bootstrap_node.js:612:3
package.json 中的项目依赖项:
“正文解析器”:“^1.18.3” "express": "^4.16.3", "express-session": "^1.15.6", "文件系统": "^2.2.2", "mysql2": "^1.5.3", “Sequelize ”:“^4.37.10”
Node v8.11.3
最佳答案
您只能在异步函数中使用 await
,而不能在顶层使用。有一个建议support top-level await ,但目前 JS 不支持。改为这样做:
let transaction;
var SimpleInspectionModel = require('../models/simpleInspectionModel.js')(sequelize, { dataTypes: Sequelize.DataTypes } );
run().catch(error => console.log(error.stack));
async function run() {
try {
// get transaction
transaction = await sequelize.transaction();
// step 2
await SimpleInspectionModel.find({}, {transaction});
// commit
await transaction.commit();
} catch (err) {
// Rollback transaction if any errors were encountered
await transaction.rollback();
}
}
Sequelize transactions support promises ,所以您应该能够将sequelize与async/await一起使用。我对 Sequelize 不太了解,但我写了一篇关于使用 async/await with Mongoose 的博客文章,这是 MongoDB 的一个类似工具,阅读起来可能会有所帮助。
关于javascript - Node.js - 使用 'async' 和 'await' 进行后续 ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50906853/