保存草稿新主题

优先级:低

平台:Discourse 移动端 iOS(未在其他平台上测试)。已在 Discourse 元讨论区和 try.Discourse.org 上复现。

描述:当系统提示保存草稿时,点击“打开草稿”按钮无响应。

复现步骤:

  1. 进入 Discourse 首页。
  2. 点击“新建主题”按钮(+ New Topic)。
  3. 在主题栏输入“测试草稿”,在编辑器正文中输入“测试”。保持未分类状态。
  4. 点击取消(Discourse 移动端上的垃圾桶图标)。系统会提示是否要保存草稿以供稍后使用,选择该选项。
  5. “新建主题”按钮变为“打开草稿”(+ Open Draft)。
  6. 点击“打开草稿”。无任何反应。
  7. 检查草稿文件夹,发现未保存任何草稿。

后果:这导致我暂时无法创建新主题。

变通方法:多次点击无响应的“打开草稿”按钮后,最终会导致移动端应用中的 Discourse 站点崩溃并返回到域名选择界面。重新进入 Discourse 后,“打开草稿”按钮已清除,恢复为“新建主题”。

5 个赞

标题长度不足,无法通过此验证
\u001e
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/models/composer.js#L1184
\u001e
但我在想,为什么代码是解析(resolve)而不是拒绝(reject)然后捕获错误?

我认为可以在这里捕获错误

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/controllers/composer.js#L1244

类似这样的写法:

this._saveDraftPromise = model.saveDraft().then(() => {
    this._lastDraftSaved = Date.now();
    ...
}, error => {
    // 在此处处理错误
}).finally(() => {
    this._saveDraftPromise = null;
});

@eviltrout 有什么想法吗?
\u001e\u001e

7 个赞

这个保存代码不幸是我们最古老的一部分,往往也是最脆弱的。多年来,我们在其上叠加了大量功能,而像保存草稿这样可能成功或失败的操作,又需要各自的自定义功能,这使得代码变得更加复杂。

我认为你的直觉很可能是对的,但在看到我们所有测试的运行情况之前,我无法确认。如果你未来有时间提交一个 Pull Request,那将非常棒。

5 个赞

我能够按照 Rhidian 的步骤在 MacOS 的 Chrome 浏览器(Discourse 元讨论区)中复现此错误:

2 个赞

你好,

感谢您提交的错误报告。该问题已在 Discourse 的最新版本中修复。问题在于,系统在不应当保存的情况下,仍会提示保存非常简短的草稿。

4 个赞

本主题已在 3 天后自动关闭,不再接受新回复。