[LayaAir3]资源加载失败不会重试的异常

1.测试例子使用的是404异常
2.默认跑例子可以重现加载异常的情况
 
3.附加另外一个BUG,用网页打开测试例子,然后关闭编辑器,必然触发
index.js:59 WebSocket is already in CLOSING or CLOSED state
 
这种情况下,本资源不再重试并且卡住(加载回调未执行),目前在编辑器共享给其他人,对方如果是wifi,信号容易抖动,或者对方网络抖动的情况下很容易出现。
已邀请:

layabox

赞同来自:

第一、引擎不会一直去重试加载资源,需要开发者根据需要自行实现逻辑。
但是对于加载失败的资源,开发者可以修改默认的重载次数,以及重载的间隔时间,例如:
Laya.loader.retryNum = 10;  //加载出错后的重试次数 
Laya.loader.retryDelay = 1000;// 延迟时间多久再进行重试,不配置就是立即重试,单位是毫秒

 第二、你的例子的逻辑存在BUG,导致了一直重新加载,却一直无法重新加载成功。

你的代码里,永远都去加载一个不存在的文件,他当然是一直按你的逻辑,总是在循环请求一个不存在的文件,然后就一直请求不成功了。
你没有进行修改文件名,只是改getRes里的文件名,当然也不可能重截成功了。
 
你应该在加载回调里,未获得资源的逻辑里去加载一个正确的资源,这时模拟请求资源成功,在重新加载的逻辑里,自然就走到了加载成功的逻辑里了。
 
示例修改如下,你自行研究一下吧。关于资源加载这块的引擎逻辑,引擎用了快十年了,不可能出现这种基础的BUG,您再仔细理解一下。
export class Script extends Laya.Script {
onAwake(): void {
Laya.loader.retryDelay = 100;
Laya.loader.retryNum = 3;
this.beginTest();
}

beginTest(fileName:string = "loadFailTest.lh") {
console.log("beginTest");
Laya.loader.load(fileName, Laya.Handler.create(this, () => {
if (!Laya.loader.getRes("loadFailTest1.lh")) {
//此时就算将loadFailTest1修改为loadFailTest,加载也无法成功
console.error("load failed");
Laya.timer.once(1000, this, () => {
this.beginTest("loadFailTest1.lh");
});
}
else {
console.log("load finish");
}
}));
}
}
下图是修改后的加载运行效果截图,当尝试无效后,引擎就不再尝试,交给开发者自己的逻辑重新加载,加载成功后,进入成功的逻辑打印。
screenshot-20240124-174559.png

 

layaAir小孟

赞同来自:

您好,
1、资源加载失败时,它是会重试的,我用您的demo,它一直在重试加载资源(见附件的录屏)。

2、网页打开测试例子后,是不能关闭LayaAirIDE的,您说的那个不是bug。

Recovery

赞同来自:

1.异常点在于,黄色警告只输出一次,却回调了N次
2.正常期望是每次请求都会有一次黄色警告,即加载前日志数量 = 黄色警告日志数量 = 加载完成回调数量
3.加载的位置我写了注释,在这个例子执行过程中,可以将项目里的资源名称改为可以正常加载的名称,加载依然无法完成(也可能是本地服务器未刷新资源导致)

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作