У меня довольно сложный express
маршрут на моем node.js
сервере, который вносит множество изменений в базу данных с помощью 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
*/
}
}
Желательно, чтобы я хотелреализовать что-то, что «объединяет» все изменения и «фиксирует» изменения, если ошибок не было.