下面是自己封装的,存在一定问题,node接触不久,promise的用法尚未理解,我想实现的是执行多条sql后,如果sql均正常执行,则返回一个定义的对象,如果某一sql出问题,直接rollback,目前我已经实现了事务,但不晓得如何再最后一条sql执行后再返回,目前的情况是for循环中的query里的回调显然不是同步的
let execTrans = async function (sql_list) {
let status = 0
let msg = ''
return new Promise((resolve, reject) => {
pool.getConnection(function(err, connection) {
if (err) {
reject( err )
} else {
connection.beginTransaction()
for (let one in sql_list) {
if (sql_list.hasOwnProperty(one)) {
let sql = sql_list[one].sql
let values = sql_list[one].values
console.log('sql: ', sql)
connection.query(sql, values, (err, res) => {
if (err) {
connection.rollback()
console.log('-------------------------Error, exec rollback-------------------------')
resolve({
status: 2001,
msg: err
})
} else {
console.log('this sql success!')
}
})
}
}
connection.commit()
console.log('exec commit!')
connection.release()
resolve({
status,
msg
})
}
})
})
}
可以把connection.query包装成promise对象,然后用Promise.all([])执行,类似下面那样