#10210·habitica

邀请部分失败: 在邀请被接受后,RSVPNeeded 仍然为真,或者反之

作者: Alys创建于 2018年4月1日更新于 2026年6月16日
标签priority: minorsection: Party Pagemongodb transactions

当玩家接受探险邀请时,有可能将其接受记录在党内(例如,见下方的党内数据中的"真"值),而邀请则不会从玩家自己的党内对象中被去除(见下方的"RSVPineed"值-在邀请被接受时本应被设定为虚假).

这不会是从代码错误本身,而是从一个更新保存到数据库,而另一个则不是.

我可以想出一些办法来解决这个问题:

  1. 固定:调整当前代码,以更新该方的文档并更新玩家的文档,使其检查是否完成了两个更新,如果其中之一或两者均失败,则重复进行,直至成功.
  2. 变通办法:一旦出现这种情况,用户通常会试图再次接受邀请。 这与“ 已接受的” 错误消息失败, 因为代码承认该方的数据中没有待发邀请状态 。 出现这种情况时,代码可以检查用户的"RSVPNed"值是否仍然真实,并设置为虚假,然后不向用户报告错误. 如果`RSVPNed'值已经是虚假的,那么我们就会像往常一样抛出这个错误,因为当时用户真的在试图做一些他们已经不可能做的事情。 在用户试图拒绝邀请的情况下,也需要类似的情况。

第一个选项是比较"正确"的,因为它会在问题发生时解决. 第二个选项可能更容易编码。

~ 我会留这个作为建议讨论几天, 看看是否有人能提出更好的想法. ~

{
" id":"3cac8ad0-62ca-4c5b-8c1d-30dca143e38a","活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活
"决断":{
"进展":{
"收":{}.
{\fn华文楷体\fs16\1cHE0E0E0}
"活":虚,.
"成员":{
"62da043c-80a8-4793-affb-7274a8b82cfa":真实,
类
{\fn华文楷体\fs16\1cHE0E0E0}
"外":"{},".
""键":"克克克克克克克克克克克克克克".
"领军":"......
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

{
" id":"62da043c-80a8-4793-affb-7274a8b82cfa","62".
"党":{
"决断":{
"进展":{
"上": 6.535623919649389, (中文(简体) ).
"下":"0"," 0"作"出".
"收集的项目":4,
"收":{}.
{\fn华文楷体\fs16\1cHE0E0E0}
"RSVPNeeded": 真实的,
""键":"克克克克克克克克克克克克克克".
"已毕":".
{\fn华文楷体\fs16\1cHE0E0E0}
"序":"平"作"平".
"升序":"升"""""".
" id":"3cac8ad0-62ca-4c5b-8c1d-30dca143e38a" (中文(简体) ).
{\fn华文楷体\fs16\1cHE0E0E0}
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
            • 说说看

以 PR #12335 更新了 Habitica 代码库,支持 MongoDB 4.2 和交易,使得解决这个问题成为可能.

交易允许执行多个文档上的操作,确保要么正确执行,要么不执行,从而有可能解决这个问题。

使用交易的例子见https://mongoosejs.com/docs/transactions.html,更多信息见https://docs.ZMongoDB.com/manual/core/transactions/。 如果你想的话 . . . . . . .

内容来源: HabitRPG/habitica