如果您上传带有标签的 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());
}
this._uppyInstance.on("file-removed", (file, reason) => {
// 我们专门处理 cancel-all 事件,所以不需要
// 在这里做任何事情。当某些文件
// 被上传处理程序处理时,也会触发此事件
if (reason === "cancel-all") {
return;
}
run(() => {
我不确定是否有更好的解决方案。所以,我在这里发帖。
对于一个非阻塞的小问题来说,文字有点多,但最初并不明显。 
3 个赞