【BUG】2.2.1版本 加载一个App内不存在的图片时 cc.loader 没有回调

当加载一张图片时 流程 如下:
cc.loader.loadRes -> jsb.loadImage -> js_loadImage -> jsb_global_load_image

整个流程完成或错误时 依赖回调函数回溯到js层,但是在 jsb_global_load_image 内对异常的处理直接 return false!导致 cc.loader 没有任何回调。

看js引擎中的代码好像是没有打算要处理加载异常的情况
function downloadImage(item, callback) {
let img = new Image();
img.src = item.url;
img.onload = function (info) {
callback(null, img);
}
// Don’t return anything to use async loading.
}

不明所以

mark

这个问题已经提交修复了,感谢反馈~

cc.loader.downloader.loadSubpackage 加载一个App内不存在的子包,回调函数第一参数 err == null 是属于一系列问题吗

好像是引擎从开始到现在,上层加载系列的API调用 CCFileUtils 都没有很好的处理文件不存在的异常

目前只处理了图片加载的相关问题,你说的这个情况,可以提供demo或者给下复现问题的描述。

引擎对分包加载的异常处理仅限于js引擎的 cc.loader.downloader._subpackages 是否存在一个子包只要过了这个限制,不管是加载一个完全不存在的子包,还是加载一个丢失分包js的子包都没有任何异常,仅 ScriptEngine 输出了相关异常的log

为什么加载一个不完整的子包,这个怎么复现的?还是加载一个丢失分包js的子包,这个怎么理解?

因为我现在在做类似 AssetsBundle 的插件。插件将分包分为三类"本地分包"“热更分包”“远程分包”,其中远程分包会被插件从App中分离出来,从而降低App包体大小, 远程分包在使用前,必须先下载,我这边测试发现,不先下载,直接loadSubpackage 回调函数没有报错,现在我这边的处理方式是在js中追加了 CCFileUtils 相关APi校验 index.js 文件是否存在来判断当前App中是否存在子包

引擎的分包应该只针对小游戏平台,你可以参考下小游戏平台的代码逻辑。

不告诉下修复的pull分支么?

目前PR还在审核中,你自己先参考下
https://github.com/cocos-creator/cocos2d-x-lite/pull/2077
https://github.com/cocos-creator-packages/jsb-adapter/pull/245

1赞

好的谢谢