自定义扩展构建bug

creator:2.4.7
文档描述:


实际现象: 在before-change-files的回调函数里如果没同步调用第二个参数的话,会直接报错:
无法在child_process中异步回调
经反复测试,同样的扩展脚本,mac系统上有这问题,windows没这问题
@arsen2010
@215194780

这个是没有问题的。检查一下自己的代码吧~~


this.completed 存的就是文档中的回调。

其他条件是一致的吗?mac系统,ccc2.4.7版本

坐等官方回复

方便提供个 demo 看看?
或者在 mirrors_cocos-creator/demo-process-build-textures
这个工程的基础上做下修改?

真感觉没有啥demo好提供的,太简单了test.zip (1.4 KB)

demo 里没执行 callback,方便提供完整的复现代码?
之前的版本可以正常运行?

重新下载附件,有执行

window,mac , m1 测试都正常没报错

那bug就是粘我身上了呗


image
这错误栈不能看出点什么来么,都是编辑器源码里抛出来的

我测试是拿 helloworld 测试,没有用什么其他插件或服务;
打印下 callback 看看是不是函数。

是函数,直接调callback()是可以的,放setTimeout就不行了;而且报错里指的callback不是我脚本里的callback,只是恰好名字相同,把脚本里的callback改成cb之后,报错里仍然是callback

function onBeforeBuildFinish(options, callback) {

    Editor.log('onBeforeBuildFinish')

    Editor.log(callback);

    setTimeout(() => {

        Editor.log(callback);

        callback();

    }, 5000);

}

建议输出一下内容。有点怀疑上下文环境问题。

按照表述,callback实际上是有传过来的。只是你在异步调用的时候丢掉了。

按照你给的方法结果如下:

'use strict';

function onBuildStart(options, cb) {
    Editor.log('onBuildStart')
    cb();
}

function onBeforeBuildFinish(options, cb) {
    Editor.log('onBeforeBuildFinish')
    Editor.log(cb);
    setTimeout(() => {
        Editor.log(cb);
        cb();
    }, 5000);
}

function onBuildFinish(options, cb) {
    Editor.log('onBuildFinish')
    cb();
}

module.exports = {
    load() {
        Editor.Builder.on('build-start', onBuildStart);
        Editor.Builder.on('before-change-files', onBeforeBuildFinish);
        Editor.Builder.on('build-finished', onBuildFinish);
    },

    unload() {
        Editor.Builder.removeListener('build-start', onBuildStart);
        Editor.Builder.removeListener('before-change-files', onBeforeBuildFinish);
        Editor.Builder.removeListener('build-finished', onBuildFinish);
    }
};

image
可以看出cb一直存在

~~ 这样子。确实不是使用问题了。

所以这个issue就成了未解之谜了咯?