游戏初始化的时候, 要读取一些配置文件和图集相关内容之后才能正常读取玩家的数据, 然后才能正常开始游戏.
但是使用之后感觉resources.load都是异步执行的, 请问怎么实现同步执行呢?
我想依次的按顺序读取文件和图集, 然后都准备好之后再执行下一步. 但不知道怎么写.
求助.
Promise
封装了下,感觉好别扭
export default class UtilRes {
public static loadAsync<T extends typeof cc.Asset>(url: string, type: T): Promise<InstanceType<T>> {
return new Promise<any>((resolve, reject) => {
cc.loader.loadRes(url, type, (err: Error, res: any) => {
if (!err) {
resolve(res);
} else {
reject('UtilRes.loadSync url:' + url + ',err:' + err);
}
});
});
}
}
public static async asyncWrap<T, U = any>(promise: Promise<T>): Promise<[T | null, U | null]> {
try {
const data = await promise;
const result: [T, null] = [data, null];
return result;
} catch (err) {
const result_1: [null, U] = [null, err];
return result_1;
}
}
public static async createActorNode(resUrl: string): Promise<cc.Node> {
let [prefab, err] = await MiUtil.asyncWrap<cc.Prefab, string>(UtilRes.loadAsync(resUrl, cc.Prefab));
if (err) {
cc.error('MapUtil.createActor resUrl:' + resUrl + ',err:' + err);
return null;
}
const node = cc.instantiate(prefab);
return node;
}
1赞
因为JS/TS的历史运行环境导致这样的,一般都是两种异步编程风格:老派callbacks,新派promise搭配await. 只能习惯这些…

分享一些知识:
为什么Javascript单线程却支持异步执行? - 知乎 (zhihu.com)
异步JavaScript简介 - 学习 Web 开发 | MDN (mozilla.org)