请教--cc.loader.loadRes 传递参数在回调函数中更改无效

  • Creator 版本:2.3.4

  • 目标平台: WEB

    test(){
    this.LoadJson(“data/fishPool”, this.mFishPoolData);
    this.scheduleOnce(()=>{
    cc.log(“延迟2秒后”);
    cc.log(this.mFishPoolData);
    }, 2);
    }

    //!!!有问题,必定返回false,因为loadRes需要时间才能执行完毕,后面先返回了
    public LoadJson(dataPath:string, js:cc.JsonAsset) {
    let res:boolean = false;
    cc.loader.loadRes(dataPath, cc.JsonAsset, (err, jsLoad)=>{
    if(err) {
    console.log(err, jsLoad);
    res = false;
    }
    else {
    cc.log("Json --> ");
    cc.log(jsLoad);
    js = jsLoad;
    res = true;
    }
    })
    }

cc.loader是异步的,所以在调用候等待了2秒,打印this.mFishPoolData还是null,路径确认没有问题,断点打在回调函数中,查看读取也是正常的,就是赋值传递给this.mFishPoolData的时候有问题.

请教各位这个应该怎么改,我打算多次调用LoadJson()方法,给不同的JSON变量传值过去.

你这写法挺奇怪的,在你给js这个变量赋值时,js和this.mFishPoolData已经是两个不同的对象了。

如果仅仅是为了赋值可以改为回调赋值的方式。

方便提供一个改回调赋值的方式吗?刚入坑creator,有点懵的.

先多谢!我看不懂,我试试看运行结果如何.
然后研究下这个bind是干什么的.
这个问题困扰了2个小时了.非常感谢!

这个bind和作用域有关,如果不这么写,那么方法里就不能写this.mFishPoolData了,不然会报错mFishPoolData undefined。可以自己多尝试一下。

解决了问题,非常感谢!