[LayaAir3]LayaIDE环境运行异步方法出现异常

这段异步加载代码运行异常,没有加载完就跳出异步往下执行了,就是日志3会比日志2先打印了,资源是正常的,会是什么原因?
 
do() {
            let tex;
                let f = async()=>{
console.log("1");
                    tex = await this.loadTexAsync(data);
console.log("3");
                }
                f();
        } 
        async loadTexAsync(data: ArrayBuffer): Promise<Laya.Texture> {
            return new Promise((resolve, reject)=>{
                Laya.loader.load(url, Laya.Handler.create(this, (tex:any)=>{
                    if(!tex) reject(null);
console.log("2");
                    resolve(tex);
                }), null, Laya.Loader.IMAGE);
            });
        }
已邀请:

layabox

赞同来自:

打印的输出和你眼睛看到的并不是同步的,可能加载就是瞬间的事情,但的确就是存在这种加载顺序,你眼睛是来不及反应的,不要用眼见到的顺序就觉得是怎么样的。
 
从代码上,因为异步操作(`this.loadTexAsync(data)`) 需要一些时间来完成资源加载,所以 `console.log("3")` 作为立即执行的同步代码,先于异步操作完成之前执行并打印 "3"。并没有什么不正常。
 
以下是对代码顺序的详细解释:
1、`console.log("1")` 立即执行并输出 "1"。
2、`tex = await this.loadTexAsync(data);` 触发了异步操作,因为 `this.loadTexAsync(data)` 返回的是一个 Promise。此时,`async` 函数会暂停在这里,而将控制权返回给主线程,以便执行之后的同步代码。
3、`console.log("3")` 是`await`之后的同步代码,并不受异步操作控制,当主线程有空时(在异步操作完成之前),它会立即执行并输出 "3"。
4、当 `this.loadTexAsync(data)` 内的异步操作完成后,然后执行回调并输出 "2"。

该问题目前已经被锁定, 无法添加新回复

商务合作
商务合作