cc.Node.once不一定触发的问题

  • Creator 版本: 2.4.6

  • 目标平台: ME浏览器

  • 重现方式:
    test() {

      console.warn("呵呵");
    

    }

    start() {

      this.node.once("ABC", this.test, this)
    
      this.node.targetOff(this);
    
      this.node.once("ABC", this.test, this)
    
      this.node.emit("ABC");
    

    }

  • 重现概率: 100%

就上面这段代码,运行的时候是不会打印出来的,我不知道这算不算BUG,但我知道这个算一个坑,实际项目中排查了很久才定位到这个问题,看源码是因为上一条once添加的一个off回调,在targetOff里面没有被去掉导致下一次Emit的时候首先调用了上一个once遗留的off回调,导致当前emit真正需要调用的方法被Off掉了

:14:复制你的试了一下没问题 我是2.3.x的 可能2.4.x以上才有问题

除了 加载资源 onLoad,等必要的回调必须用以外,其他的回调啊 告诉你 ,你就铁了心不要去用 就是了 然后你就发现烦恼的问题少一个数量级

我抱着试试看的态度试了一下,2.3.3是没问题的,底层的源码不同,cc.Node.once的时候没有加入一个用于off掉真实回调的一个回调,所以不会出现这个问题

哈哈,也不要那么极端嘛,有问题大家总要和官方讲,不然这个引擎就不会进步了,不进步的话,你以后都看不见他啦

@jare 官方大佬看看呗