Egret社区
产品 Egret Engine 版本 5.2.7
复现概率 100% 平台 Windows 微信开发者工具V1.02.1808101
复现步骤 1、创建项目
2、项目更改发布配置为外部资源,也就是使用ResSplitPlugin
3、小游戏启用资源文件缓存
4、第一次缓存如json文本资源
5、再次刷新游戏读取缓存json文件时text.js代码报错
问题描述 在开发微信小游戏时启用资源缓存,在微信开发者工具中调试,在第一次缓存json文本资源后,再次刷新游戏这时text.js
中代码逻辑会判断json文件是否已缓存,当前json文件已缓存后,此时会调用fileutil.fs.readSync读取缓存文件,但在读取时报错。
错误代码 text.js报错相关代码:
fileutil.fs.readSync(targetFilename, 'utf-8').then((data) => {
resolve(data)
})
file-util.js报错相关代码:
readSync: (p) => {
return wxFs.readFileSync(WX_ROOT + p, 'utf-8');
}
BUG截图
我调试后发现text.js中读取缓存文件调用的是file-util.js中fs中的readSync方法,而text.js中调用时使用了promise写法:

test.js报错代码

test.js报错代码

而file-util.js中fs中的readSync方法返回的却不是promise,所以导致了报错:
微信截图_20180820164105.png

现在我的解决办法是修改readSync方法,修改如下(做如下修改后就没报错了):
readSync: (p) => {
    return new Promise((resolve, reject) => {
      resolve(wxFs.readFileSync(WX_ROOT + p, 'utf-8'));
    });
  }


分享到 :
0 人收藏

4 个回复

倒序浏览
Nasus  初窥堂奥 | 2018-8-20 16:53:52
miss_sokuber  初窥堂奥 | 2018-8-21 11:49:40
我遇到的是加载资源文件失败,不知道是否跟楼主的问题一样,
问题描述:当有新的皮肤或者是新的资源加进来的时候,因为有缓存,会访问不到。然后我开的是本地调试,按道理不存在这种情况。一直没找到是什么原因。而且缓存也清不掉,已经设置过不缓存,读本地
leonard  圆转纯熟 | 2018-8-21 15:01:24
确实如此,也不知道官方怎么通过测试的
Dada.  初学乍练 | 2018-8-22 09:24:12
miss_sokuber 发表于 2018-8-21 11:49
我遇到的是加载资源文件失败,不知道是否跟楼主的问题一样,
问题描述:当有新的皮肤或者是新的资源加进来 ...

因为在游戏启动时也就是Main里面需要将资源配置default.res.json文件优先加载,引擎才能通过资源名自动找到相应资源,因为default.res.json也是文本资源,所以default.res.json也缓存了,所以这个需要你自己做一些处理,比如根据版本号来判断,如果有版本更新先删除default.res.json缓存,再当Main启动时又会重新拉取缓存。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部