javascript - Node.js - 使用 'async' 和 'await' 进行后续 ORM

标签 javascript node.js orm async-await sequelize.js

我一直在尝试找出如何使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/

相关文章:

javascript - 为什么 HTML5 video fullscreen 让整个页面全屏?

javascript - 在 Node 中生成后捕获子进程中的输入

rest - JPA 2.0 元模型是否可用于确定双向关联的双方

mysql - Symfony2 - 如何根据自定义查询获取实体对象?

javascript - 如何使用jquery在注册过程中检查注册者的年龄

javascript - AngularJs。是否可以通过单击取消选择 HTML “radio” 输入?

javascript - React - forEach() 的结果未定义

node.js - 我无法使用 Nodemailer 制作邮件系统

node.js - 在 Mongoose 中按日期查找

java - SQLSyntaxErrorException : Table/View 'BUYER' does not exist. 缺少什么?