JS/TS中async与await使用
介绍
- async:
async
是“异步”的简写,带async关键字的函数,是声明异步函数,返回值是promise对象,如果async关键字函数返回的不是promise,会自动用Promise.resolve()
包装。
- await:
await
可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。
如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。
例如在creator中动态加载预制体
/**
* 获取prefab
* @param path 路径
* @returns
*/
public static async loadPrefabRes (path: string) {
return new Promise((resolve, reject)=>{
this.loadRes(`prefab/${path}`, cc.Prefab, (err: any, prefab: cc.Prefab)=>{
if (err) {
console.error('Prefab load failed', path);
reject && reject();
return;
}
resolve && resolve(prefab);
})
})
}
- await调用方法
let prefab = await resourceUtil.loadPrefabRes(className) as cc.Prefab;