【发布时间】:2019-05-28 21:13:14
【问题描述】:
我的node.js 服务器中有一个相当复杂的express 路由,它通过mongoose 对数据库进行了许多修改。
我的目标是实现一种机制,在发生任何错误时恢复所有更改。我的想法是实现撤消到catch 块的功能。
但这很丑陋,因为我必须知道以前的值是什么以及如果catch 块中出现错误怎么办?当Promise.all(array.map( /* ... */ )) 期间发生错误时,恢复这些更改尤其困难
我的路线看起来像这样:
module.exports = (req, res) => {
var arr1, var2, var3
try {
const body = req.body
arr1 = await fetchVar1(body)
const _data = await Promise.all([
Promise.all(
arr1.map(async x => {
const y = await fetchSometing(x)
return doSometing(y)
})
),
doSomething3(arr1),
])
var2 = _data[1]
var3 = _data[2]
return res.json({ arr1, var2, var3 })
} catch (err) {
/**
* If an error occurs I have to undo
* everything that has been done
* in the try block
*/
}
}
最好我想实现“批量”所有更改并在没有发生错误时“提交”更改。
【问题讨论】:
标签: javascript node.js express mongoose try-catch