async/await如何在sequelize中应用 - CNode技术社区

async/await如何在sequelize中应用
发布于 8 年前 作者 iori2882 7762 次浏览 来自 问答

看了网上的教程,下面的代码我能理解,返回值必须是一个Promise对象,使用await的时候必须包裹在async内 123.png 麻烦大家了,我不知道如何在sequelize中应用!比如下面我之前的代码,我在不改动代码的情况下,可以在外面直接使用await调用么?如果不可以应该怎样改写啊?不明白不明白...

 add : function (ItemsApplication,callback) { 
 console.log("Access The Method[addBasicSettings] Starting...");
 var option = {
 isNeedId:true,
 isNeedUUId:true,
 pkColumn:'items_app_id'
 };
 var ItemsApplicationModel = _getModel('sys_org_items_app','/src/box/models/ItemsApplicationModel',option);
 _dbManager.transaction(function (t) {
 return ItemsApplicationModel.create(ItemsApplication,{
 transaction : t
 }).then(function (result) {
 return callback(null,result);
 })
 }).catch(function (err) {
 console.log("具体信息:"+err);
 _LogUtil.writeErrorMsg( err.message);
 return callback(new Error('添加失败'));
 });
 },};\n```
	
	能在不改上面的代码的情况下像下面那样直接调用?
	await ItemController.add(item1,function (err,result2) 
	await ItemController.add(item2,function (err,result2)
13 回复

既然用 await ,就不应该有回调了

try{
	const result =	await ItemController.add(item1) 
}catch(e){
}

你把这个add方法改造下返回promise不就好了

来自酷炫的 CNodeMD

sequelize 本身支持 promise。

 const asyncPS = async function () {
 await ItemController.add(item1,function (err,result2) 
 await ItemController.add(item2,function (err,result2)
 };
 asyncPS();

@zy445566 大神,你说的对,我在网上没找到改造add方法的教程啊!

@liangtongzhuo 直接用就行么?

@zy445566 或者说 我想实现托管的事务处理(如下代码),那么数据库方法要做什么样的改变啊? await sequelize.transaction( async t=>{ const user = User.create( { name: "Alex", pwd: "2dwe3dcd" }, { transaction: t} ) const group = Group.findOne( { name: "Admins", transaction: t} ) // etc. })

@iori2882 为什么还要这样写,直接这样写不就好了,保证是同一个连接不就好了 ,正好之前裸写过一次,给你了。 https://github.com/zy445566/myBlog/blob/master/20180414block-run/index.js image.png

@iori2882 事务的栗子

let transaction; 
try {
 // get transaction
 transaction = await sequelize.transaction();
 // step 1
 await Model.destroy({where: {id}, transaction});
 // step 2
 await Model.create({}, {transaction});
 // commit
 await transaction.commit();
} catch (err) {
 // Rollback transaction if any errors were encountered
 await transaction.rollback();
}

参考地址:https://stackoverflow.com/questions/42870374/node-js-7-how-to-use-sequelize-transaction-with-async-await/43342688

@zy445566 嗯,这个是不是直接使用mysql的底层写法啊?我这里用的sequelize框架~~~~~

@liangtongzhuo 谢谢哥们,我试试,这个应该是手动提交的,不能像下面那样自动提交么? await sequelize.transaction( async t=>{ const user = User.create( { name: "Alex", pwd: "2dwe3dcd" }, { transaction: t} ) const group = Group.findOne( { name: "Admins", transaction: t} ) // etc. })

@iori2882

transaction = await sequelize.transaction({ autocommit: true});

官方地址:http://docs.sequelizejs.com/manual/tutorial/transactions.html

@liangtongzhuo 十分感谢!!!

回到顶部

AltStyle によって変換されたページ (->オリジナル) /