Creator3.8.2 命令行打包,onAfterBuild 未执行完成就终止代码执行了

命令行打包,打包插件里执行了下面的代码。
export const onAfterBuild: BuildHook.onAfterBuild = async function (options, result: IBuildResult) {
console.warn("- onAfterBuild", Editor.Project.path);
console.warn(‘开始生成热更文件’);
let project = Editor.Project.path;
let buildPath = result.dest;
processers.forEach(v => v.Run(project, buildPath, options));
new PlatformDecrator(new EncryPng()).Run(project, buildPath, options, () => {
new PlatformDecrator(new HotFileGenrator()).Run(project, buildPath, options, () => {
new PlatformDecrator(new DelRemoteSubGame()).Run(project, buildPath, options);
})
})
console.warn(‘完成生成热更文件’);
};

命令行打包,在处理资源加密的时候,加密流程没有执行完成就终止执行了,正常加密耗时大概2046ms,导致后面没有执行HotFileGenrator的代码

如果跳过资源加密,就省去了2046ms的加密时间,直接执行HotFileGenrator是能生成热更代码的。

这种情况,怎么去处理呢

@jare @Knox @huanxinyin

顶一下,拜等大佬给指点一下

报什么错吗?

你应该要 await

我去代码中试一下

加了也没有生效,还是不可以
image

你这段代码,明显看出,你没搞懂 promise async await 这些语法,先去学学?

1赞

image
感谢,这样就可以生效了,8s,加密资源有充分时间去加密了

感觉写的还是有点怪

我不知道你这几句代码实际里面做什么了,但是从你的回调写法来看

有没有可能正确的写法是这样子

await new Promise((resolve) => {
    new PlatformDecrator(new HotFileGenrator()).Run(project, buildPath, options, () => {
        new PlatformDecrator(new DelRemoteSubGame()).Run(project, buildPath, options);
        resolve();
    });
});

上面有个脚本是做资源加密的,加密时间不确定。因此需要延时8s 要等资源加密脚本执行完成后(8s是足够执行完成的),然后再执行生成热更资源文件和删除配置的远程子bundle。