javascript - javascript回调是原子的吗
问题描述
我想确保托管在不同地方的两个独立第三方数据库中的字段是同步的。我有以下通用节点/快速 js 代码:
router.post ('url', function(req,res,next) {
third_party_api_1.set_a (req.body.param, function(err, a) {
third_party_api_2.set_b (req.body.param, function(err, b) {
res.end()
})
})
})
如果最终用户发布(参数 = 1),我期望(a = b = 1)。如果他们发布 (param = 2) 我期望 (a = b = 2)。如果两个用户同时发布(param = 1)和(param = 2),第三方数据库中的a和b是否总是相等的?我知道它们可以是 1 或 2,具体取决于时间,但我想确保它是 (a = b = 1) 或 (a = b = 2) 而不是 (a = 1, b = 2) 或 ( a = 2,b = 1)。
换句话说,会set_a
和set_b
是“原子的”吗?
谢谢!
编辑#1:“a”是第三方数据库中的单个值,“b”是另一个第三方数据库中的另一个值,我想让用户发布一个值,我的代码将 a 和 b 都替换为那个用户价值。
编辑#2:我无法直接控制第三方数据库,我只能调用公共 api。也许我需要一个围绕 api 调用的互斥锁?我该如何实施?
解决方案
您似乎在询问两个分布式系统之间的“一致性”而不是原子性。
您所问的实际上更多是架构问题,而不是 JavaScript 特有的任何问题。如果您对两个不同的数据存储进行调用,则需要一些方法来确保这两个端点保持一致。
推荐阅读
- java - Kubernetes:如何从 Java 微服务中检测总副本
- html - 从 HTML div 复制而不复制格式样式
- python - 程序来检查方程的平衡括号
- sql-server - 如何在不将所有列添加到 Group By 子句的情况下返回 MAX() 值?
- python - 用虚线高亮线和用 fig.update_traces 标记
- javascript - 从数组项创建对象
- rpgle - 如何在 ascii 中进行 base64 编码
- python - 如何在 Python 的不同文件函数中使用类中的变量?
- ruby - 在我的 MacOS 10.15.7 上升级 ruby 2.6 时遇到问题
- android-studio - jCenter & Bintray 正在关闭。怎么办?如果使用了第三方库,如何解决?