Хороший вопрос, я ожидаю, что он быстро ответит.
Иногда мы хотим обновить множество документов, когда действие выполняется во внешнем интерфейсе.
Пример кода реакции
this.props.submitRecord(newRecord, (err, record) => {
if (err) actions.showSnackBar(err);
else {
actions.showSnackBar("Record Submitted Successfully ...");
this.props.validateClub(this.props.club._id, (err, message) => {
if (err) actions.showSnackBar(err);
else {
obj.setState({
player: {},
open: false
});
actions.showSnackBar(message);
}
});
}
});
Как мы видим, я сначала отправляю первый запрос, а в случае успеха - второй. Если первое не сработает, второго не произойдет. Но если первый проходит, а второй не работает по какой-либо причине, мы имеем несоответствие данных.
В идеале мы хотим отправить их всех вместе, и все они пройдут или не пройдут ни один. Есть ли простой способ сделать это с помощью response, Node и mongoose, или мне нужно сделать это жестким способом (что также может быть связано с ошибками, хранить старые значения до тех пор, пока все запросы не будут удовлетворены, или сделать некоторый запрос возврата на сервер узла, смеется).
Спасибо





Транзакции являются частью Mongodb 4.0. В предыдущих версиях Mongodb не было поддержки транзакций. Другой способ - выполнить откат в случае сбоя с помощью кода, и есть некоторые неискренние пакеты npm, такие как mongoose-transaction.
https://www.mongodb.com/transactions
Если операции должны выполняться только для целей пользовательского интерфейса, тогда следует использовать Promise.all, однако, если дело в том, что некоторый запрос из пользовательского интерфейса отправляется на сервер узла, и этот запрос является частью другого запроса, который должен быть запущен атомарно, тогда вам, возможно, придется реализовать двухфазную фиксацию между сервером node.js и реагирующим интерфейсом. Для исследования этого может потребоваться дополнительная информация (например, код node.js) ...