找回密码
 免费注册

[Javascript] async和await的使用

[复制链接]
admin 发表于 2024-1-31 00:26:06 | 显示全部楼层 |阅读模式
  1. //异步调用,Promise代表一个异步操作,主要是封装回调
  2. load(path: string) {
  3.     return new Promise((resolve, rejects) => {
  4.         resources.load(path, Prefab, (err: Error, data: Prefab) => {
  5.             if (err) {
  6.                 // 失败,执行rejects函数,err.message是返回的错误信息。不会执行Promise.then
  7.                 rejects(err.message);
  8.                 //只要执行了rejects,后面哪怕调用到了resolve函数,也不会触发Promise.then
  9.                 //所以,return应该可以不加,但是为了代码的可读性,还是加下。
  10.                 return;
  11.             }
  12.             //成功,把data传送给Promise.then函数
  13.             resolve(data);
  14.         })
  15.     })
  16. }

  17. //async要和await配套使用
  18. //await表示强制等待状态。
  19. //async表示函数是异步操作,不会阻塞执行逻辑。
  20. //showWinAsync函数使用到了await,必须对该函数进行async标记。这就是async和await的配套使用。这样设计的目的应该是保证强制等待的操作不会阻塞其他操作。只是对Promise起效果。
  21. async showWinAsync(path: string, action?: string, duration?: number) {
  22.    
  23.     //await后面要跟一个Promise对象,等Promise的异步操作执行完毕后,代码才会执行下去。
  24.     await this.load(path).then((data: Prefab) => {
  25.         if (data) {
  26.             let parent = find("Canvas");
  27.             if (parent == null) {
  28.                 warn("game error: \'Canvas/bg\' not exist!");
  29.                 return;
  30.             }

  31.             let winNode = instantiate(data);
  32.             parent.addChild(winNode);
  33.             winNode.setPosition(Vec3.ZERO);
  34.         }
  35.     })
  36.    
  37.     //有await,需要等load.then函数执行完毕,才会执行到这里。
  38.     //没有await,则不会等待load.then函数的执行。
  39.     log("执行完成。");
  40. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|Archiver|手机版|小黑屋|信息共享网

GMT+8, 2024-5-15 06:15 , Processed in 0.067818 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表