问题标签 [acid-state]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
286 浏览

javascript - Marklogic 中的 JavaScript 多语句事务

我想在 marklogic 中用服务器端 JavaScript 编写一个多语句事务。我想要实现的是,做一个更新事务,然后编写一个查询语句来查询更新的文档并确认更新在事务中可见,最后进行回滚。通过回滚,我想确认在事务中进行的更新在事务外部不可见,而在事务中可见。我在 Xquery 和服务器端 JavaScript 中都编写了代码,以便使用 xdmp:eval/xdmp.eval 来实现这一点。我能够使用 Xquery 成功实现它,但不能在服务器端 Javascript 中实现。

以下是我的 Xquery 代码:

下面是我的服务器端 JavaScript 代码:

我正在通过查询控制台执行这两个代码。我希望在这两种情况下都能看到“可见”的结果。但是在运行服务器端 JavaScript 代码时,它向我抛出了错误:[javascript] TypeError: Cannot read property 'result' of null due to xdmp.rollback 并且无法看到变量 'result' 中的值

有人可以纠正我的服务器端 javascript 代码中出了什么问题吗?

0 投票
1 回答
68 浏览

haskell - 使用类型类为使用 Acid-State 时提供替代实现

我使用 scotty 和 acid state 编写了一个 Web 应用程序,现在我想使用类型类来为我的应用程序的测试功能提供替代实现。我对它有了大致的了解,并且能够将它应用到如此简单的示例中,但是由于我使用的是酸性状态,因此涉及到很多类型类和模板 haskell,我还不完全适应。

所以我有这些针对不同能力的直接课程

我还为我的“生产”单子提供了实例。

但是当涉及到数据库功能时,我无法按照我的意愿工作。

这个类看起来像这样

并且生产 monad 的实例工作正常,因为它只将事件传递给酸状态的更新和查询函数,但是对于测试 monad,我想要这样的东西: instance Db Test where dbQuery (GetVersion) = use ( testDb .clientVersion) dbQuery (GetUser name) = preuse (testDb . users .ix name) dbUpdate (PutUser name user) = users %= M.insert name user ... 这样我就可以匹配 GetVersion、GetUser 等(其中由模板 haskell 函数 makeAcidic ... 生成,并指定在测试环境中应如何处理它们。

但我得到了错误:

我猜那是因为 GetVersion、GetUser 等都有自己不同的类型。那么有没有办法做到这一点?


纳入建议

我尝试了 Peter Amidon 提出的建议,但遗憾的是它仍然无法编译,这是我的测试代码

这里是错误

0 投票
1 回答
937 浏览

parallel-processing - 仅当 Play 1 在 Ansible 中成功时如何执行 Play 2

我有两部戏剧,每部都有一项任务。

第一个 Play 检查是否/var/test.dat存在于每个目标上。只有当第一次播放成功时,我才希望运行第二次播放,它并行执行这些脚本。

如果第一次播放失败,即 test.dat 不存在,我希望在不执行第二次播放的情况下终止剧本。为此,我已将 setany_errors_fatal设置为 true

我需要将 ansible Playstrategy设置为免费,因为每个脚本都需要 30 分钟才能完成。

我对ansible的理解有限。

我知道,如果我将两个任务都放在一个 PLAY 下,并设置释放这两个任务的策略,那么这两个任务将并行运行,这是我不想要的。

我尝试了上面的剧本,但是尽管第一个剧本的任务失败了,但我看到第二个剧本执行了。

你能建议我怎样才能让它工作吗?