node.js - 什么是/如何使用 NODEjs 中的 neo4j-driver 将多个 tx.run 作为单个事务编写?
问题描述
我正在尝试同步两个数据库,对于每种类型的操作,我希望它是一个完整的事务,我已经设置了一些相当基本的东西,但我不确定这是否会作为单个事务实际运行和回滚。我一直在查看文档,但 NodeJS 的文档相当稀缺。
我的示例代码:
const tx = session.beginTransaction();
SyncElements(doc.lists.elements, existingElements, tx);
tx.commit()
.then(res => {
console.log('SYNC ELEMENTS SUCCESSFUL, RESULT:', res);
})
.catch(err => {
console.error('COULD NOT SYNC ELEMENTS TRANSACTION FAILURE: ', err);
});
现在在SyncElements()
获取 tx 对象的函数中,它将调用tx.run(
数十次。
我的问题是,这几十个tx.run
电话,它们都会被视为我上面提交的主要交易的一部分吗?如果这些调用中的任何一个失败,所有使用该 tx. 对象被反转?
编辑:我的第二次尝试:
我的每一次运行都返回了这样的承诺:
deleteElements.forEach(el => {
allOperations.push(deleteElement(el, tx));
});
接着
const deleteElement = (
el: Element,
tx: neo4j.default.Transaction,
): Promise<neo4j.default.StatementResult> => {
return tx.run(`MATCH... STATEMENT`);
};
我将它们存储在一个数组中,然后运行:
try {
await Promise.all(allOperations);
await tx.commit();
return;
} catch (err) {
await tx.rollback();
console.error('COULD NOT SYNC ELEMENTS TRANSACTION FAILURE: ', err);
}
我认为这与文档更接近?我想在我的第一次尝试中我真的没有办法回滚事务所以只是假设如果有错误它不会提交?
解决方案
推荐阅读
- python - 使用 struct.pack 在 Python 中打包/解包一个 3 字节整数
- javascript - 单击按钮后显示连续数字的问题
- c# - SignTool 错误:未找到满足所有给定条件的证书。- 如何建造
- python - How to draw on a Fourier transform numpy array Opencv
- python - 从 csv 文件读取变量时 Subprocess.Popen() 不起作用
- javascript - 在 React 中创建标题
- database-administration - 当我运行维护计划时,日志查看器中显示的用户“sa”登录失败
- django - Django 视图中的动态模板
- ctypes - Ctypes LPSTR 函数参数
- c++ - 测量 C/C++ 代码块中分配的内存