【发布时间】:2020-08-06 00:22:28
【问题描述】:
假设我有两个功能:
export const setThingAlertsInactive = (userID, thingIDs) => {
return db.any(' UPDATE thing_alerts SET is_active = false WHERE IN (Select * from thing_alerts where user_id = $1 and thing_id IN ($2:csv))', [userID.toString(), thingIDs])
}
export const archiveOrRestoreThings = (thingIDs, archive) => {
let archivedStatement =''
if(archive === true){
archivedStatement = 'archived = current_timestamp'
} else if(archive === false){
archivedStatement = 'archived = NULL'
}
return db.none(`UPDATE things SET ${archivedStatement} WHERE id IN ($1:csv)`, [thingIDs])
}
我想一起运行它们,所以如果一个失败,另一个回滚。其实我是故意在第一个 SQL Query 中留下错误的。
这是我的 tx 函数:
export const archiveOrRestoreThingsAndSetAlert = (userID, thingsIDs, archive) => {
return db.tx((transaction) => {
const queries = [archiveOrRestoreThings(thingIDs, archive), setThingAlertsInactive(userID, projectIDs)]
return transaction.batch(queries)
})
}
第一个查询运行并有效。第二个失败。在这种情况下,我需要能够将它们回滚。谢谢!
【问题讨论】:
标签: javascript postgresql pg-promise