标签成功上传 CSV 文件后控制台中的小错误

如果您上传带有标签的 CSV 文件,控制台将在成功上传后显示错误。


以下是一些调查结果。

根本问题在于,根据当前逻辑,模态框关闭得太快了。

错误发生在 uppy-upload.js 中。
由于元素(uppy-upload)已被销毁,因此属性未能设置。

这是怎么回事? this._uppyInstance?.cancelAll();

供参考,_reset 是从 _allUploadsComplete 中调用的。

成功上传后,函数的调用顺序如下:
uploadDone_allUploadsComplete → [ _reset ]

当调用 uploadDone 时,模态框会立即关闭。
这意味着 uppy-upload 元素将在帧结束时被销毁。
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/admin/addon/components/tags-uploader.js#L22-L26

回到 this._uppyInstance?.cancelAll();。这将触发下面的事件。
这就是它失败的原因。由于 run(),属性将在元素销毁之后设置。

这是一个小的回归。引入于:

uppy-upload.js

tags-upload.js

可能的解决方案:

  • 稍晚关闭模态框
  uploadDone() {
    this.refresh();
    this.dialog
      .alert(I18n.t("tagging.upload_successful"))
      .finally(() => this.closeModal());
  }
  • 将检查移出 run() 循环。
    this._uppyInstance.on("file-removed", (file, reason) => {
      // 我们专门处理 cancel-all 事件,所以不需要
      // 在这里做任何事情。当某些文件
      // 被上传处理程序处理时,也会触发此事件
      if (reason === "cancel-all") {
        return;
      }

      run(() => {

我不确定是否有更好的解决方案。所以,我在这里发帖。
对于一个非阻塞的小问题来说,文字有点多,但最初并不明显。 :smile:

3 个赞