Node.js - 使用'async'和'await'与续集ORM



我一直在试图找出如何使续集与"异步"和"等待"一起工作。 我能找到的关于该主题的最佳信息是此线程中的答案: 节点.js 7 如何使用 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((; ^^^^^

语法错误:await 仅在异步函数中有效

atcreateScript (vm.js:80:10( at Object.runInThisContext (VM.js:139:10( 在 Module._compile (模块.js:616:28( 在 Object.Module._extensions..js (module.js:663:10( at Module.load (模块.js:565:32( at tryModuleLoad (module.js:505:12( at Function.Module._load (module.js:497:3( at Function.Module.runMain (模块.js:693:10( 启动时 (bootstrap_node.js:191:16( 在 bootstrap_node.js:612:3

package.json 中的项目依赖项:

"正文解析器": "^1.18.3" "快递": "^4.16.3", "快速会话": "^1.15.6", "文件系统": "^2.2.2", "mysql2": "^1.5.3", "续集": "^4.37.10">

节点 v8.11.3

只能在异步函数中使用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();
}
}

续集事务支持承诺,因此您应该能够将续集与 async/await 一起使用。我对Sequelize了解不多,但我写了一篇关于使用Mongoose的async/await的博客文章,这是一个类似的MongoDB工具,可能会有所帮助。

我的两分钱:如果你正在使用随后调用的类方法,请确保再次使用 async/await。应在异步函数中使用 await 调用您的类方法。您必须在调用堆栈的每个步骤中使用 async/await。

最新更新