看了网上的教程,下面的代码我能理解,返回值必须是一个Promise对象,使用await的时候必须包裹在async内 麻烦大家了,我不知道如何在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)
既然用 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
@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();
}
@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. })
transaction = await sequelize.transaction({ autocommit: true});
官方地址:http://docs.sequelizejs.com/manual/tutorial/transactions.html
@liangtongzhuo 十分感谢!!!