演示demo:https://gitee.com/szrpf/AsyncDemo

以上2个方法,都是等待duration秒后,触发一个回调
区别是:delay是同步写法,sleep是异步写法
有一个需求,等待N秒后打印:“第N步”(一共打印4步)
同步写法

回调地狱,如果要求打印100步呢?

异步写法

异步方法会卡住进程,直到触发resolve后,才会执行下一行代码

如果要求打印100步呢?异步方法的好处显而易见

这就是为什么现代JavaScript标准中,推荐用异步写法

巩固一下,同步改异步,5个步骤:
有返回值的版本:
回家作业:请把这个获取资源的方法改成异步
loadAsset(path: string, type: any, callback: (asset: any) => void): void {
let id = path.indexOf(’/’);
let bundleName = path.slice(0, id);
let assetPath = path.slice(id + 1);
assetManager.loadBundle(bundleName, (err: Error, bundle: AssetManager.Bundle) => {
if (err) { callback(null); return; }
bundle.load(assetPath, type, (err: Error, asset: any): void => {
callback(err ? null : asset);
});
});
}
Gitee地址:https://gitee.com/szrpf
EMail地址:27185709@qq.com
推荐链接:
1、【包教包会】CocosCreator3.x——重写Sprite
4、【包教包会】CocosCreator3.x全局单例最优解
5、【包教包会】节点扩展(支持原生,附引擎源码查询教程、skew翻页教程)



)



受限当前业务中 只有一层的then,所以还好 可以在失效的时候 return value出去, 业务底层都是使用的resolve(null) 来处理错误 所以不存在reject的问题,可以根据自己的情况改动