每种失败都是带稳定 code 的 DocumentEngineError。文档引擎错误码在 1.x 期间永远不会变,所以请按 code 判断,不要按消息文字判断。
import { isDocumentEngineError } from "fabricjs-document-engine";
try {
await engine.load(id);
} catch (error) {
if (isDocumentEngineError(error) && error.code === "UNSAVED_CHANGES") {
await engine.save();
await engine.load(id);
}
}除了 code,错误还可能带有 issues、unknownTypes、missingAssets、missingFonts、problems、migrationFrom、retryable 和 cause。
全部文档引擎错误码
| 错误码 | 触发时机 |
|---|---|
INVALID_DOCUMENT | 文档结构不对,或导入的文本不是 JSON |
UNSAFE_DOCUMENT | 不安全的图片地址、对象太多或嵌套太深 |
UNSUPPORTED_SCHEMA | 由这个包更新的大版本写入 |
UNKNOWN_OBJECT_TYPE | 自定义类没有注册 |
INVALID_CUSTOM_OBJECT | 注册的类没有静态 type,或不是 Fabric.js 类 |
MIGRATION_FAILED | 旧文档无法升级 |
LOAD_ABORTED | 更新的加载或 destroy 中止了这次加载 |
LOAD_FAILED | Fabric.js 或存储加载失败 |
MISSING_ASSETS | 有图片无法加载 |
MISSING_FONTS | 字体不可用,且开启了 requireFonts |
ASSET_UPLOAD_FAILED | upload 处理函数失败 |
UNSAVED_CHANGES | 打开另一份文档会丢掉未保存的改动 |
STORAGE_MISSING | 没有存储却调用了 load、save 或自动保存 |
SAVE_FAILED | 重试后存储仍然拒绝 |
SAVE_CONFLICT | 另一个标签页或设备先保存了 |
SAVE_CANCELLED | 因为打开了另一份文档或引擎被销毁,保存被丢弃 |
DOCUMENT_NOT_FOUND | 内置适配器里没有这份文档 |
HISTORY_FAILED | 撤销或重做无法重建对象 |
RECOVERY_MISSING | 没有配置恢复 |
RECOVERY_NOT_FOUND | 没有恢复副本 |
RECOVERY_FAILED | 无法写入恢复副本 |
VERSIONS_UNSUPPORTED | 存储没有版本相关的方法 |
VERSION_NOT_FOUND | 没有这个版本 |
VERSION_FAILED | 自动版本失败 |
INVALID_EXPORT_OPTIONS | 导出配置无效 |
EXPORT_BLOCKED | 有图片或字体会让导出出错,见 error.problems |
EXPORT_ABORTED | 导出被取消 |
EXPORT_FAILED | 渲染失败 |
ENGINE_DESTROYED | 在 destroy() 之后仍使用了引擎 |
需要界面处理的几个
大多数文档引擎错误码记下日志就可以了。下面这几个需要用户做决定,请给它们一个对话框:SAVE_CONFLICT(保存冲突)、MISSING_ASSETS(图片和字体)和 UNSAVED_CHANGES。完整的处理代码见上线清单。