邀请页面错误 - “无法读取未定义(读取“slice”)的属性”

在最新稳定版本中,当我点击 /u/user_name/invited/pending 处的“创建邀请链接”按钮时,我看到一个 JavaScript 错误。

控制台显示:

Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘slice’)
at h.shortKey (chunk.f105ceace2ad381ddb2f.d41d8cd9.js:241:61588)

如果邀请对象在 invite_key 从服务器填充之前被渲染,那么 invite_key 将是 undefined,并在使用 .slice() 时因操作空值而崩溃。

invite.js 中,shortKey 函数尝试缩短邀请密钥:

shortKey(key) {
  return key.slice(0, 4) + "…";
}

我无法在 meta 上重现它,所以也许是因为我的服务器或网络不够快。但是,在使用 .slice() 之前检查密钥是否存在似乎可以解决此问题:

return key ? key.slice(0, 4) + "…" : "";

为了快速修复,是发在这里还是开一个 PR 更好?

邀请密钥不可为空:

这是在迭代 model.invites:

我查看了代码,不确定部分填充的代码来自哪里,即使我在网络上添加了 400 毫秒的延迟,我也无法重现。

我认为我们需要在修补之前进行某种重现,该修补将允许人们复制一个损坏的邀请链接。

感谢您对此进行调查并指出这一点。

将延迟放在 before_create 应该可以解决问题。

我已将其更新为:

{{else}}
  {{icon "link"}}
+ {{#if invite.invite_key}}
    {{i18n
      "user.invited.invited_via_link"
      key=invite.shortKey
      count=invite.redemption_count
      max=invite.max_redemptions_allowed
    }}
+ {{else}}
+   <em>正在生成链接...</em>
+ {{/if}}
{{/if}}

我认为只要进行本地化,这作为公关就没问题。

仍然对我们在哪里用一个半满的对象填充 Invite 感到有些困惑,但这比失败要好,而且在我看来是正确的。

我在 Meta 上看到这个错误了吗?我想知道它是否已在 latest 中修复。如果是这样,我们只需要确定修复它的提交,然后将其反向移植到稳定版。

save() 后,在 invite_key 从服务器填充之前,邀请已立即添加到列表中。它仍然存在于 latest 中,因此我打开了 PR #35679

1 个赞