TypeScript之异步函数
admin
2023-07-27 21:40:06
0次

必须搞清楚 setTimeout 为异步函数.
因为 : TS中没有线程休眠 , 所以我提供了如下测试方式

一 : 正常

module demo{
    export class AsyncDemo{
        private _sentry : number = 0;
        public start() : void{
            this.getSomething("Aonaufly").then(
                $value=>{
                    egret.log(`执行成功 ! name : ${$value}`);
                },
                $error=>{
                    egret.log(`执行失败 ! error : ${$error}`);
                }
            );
        }

        private timeout() : number{
            while( this._sentry == 0 ){
                if( this._sentry != 0 ){
                    break;
                }
            }
            return egret.setTimeout(
                this.handler_timeout,
                this,
                2500
            );
        }

        /**
         * 测试异步回调函数
         * @param {string} $name
         */
        private async getSomething( $name : string ) : Promise{
            egret.log(`开始执行异步函数`);
            this._sentry = 1;
            const $id = await this.timeout();
            egret.log(`timeout 执行完毕! timeid : ${$id}`);
            return $name;
        }

        private handler_timeout() : void {
            egret.log(`执行了等待 2.5秒`);
        }

    }
}

结果 :
TypeScript之异步函数

解释 : setTimeOut是异步的

二 :
TypeScript之异步函数

因为 : await 关键字 , 是等待 this.timeout()的结果 , 他是永远等不到的 , 所以程序卡死

结果:
TypeScript之异步函数

这个和 C# 是一样的 , 只不过C#好测试 , 因为C#有线程的概念!!!

其他补充 : https://blog.csdn.net/rcjjian/article/details/72831577

下面有三个使用到Prmomise的例子
第1个例子 使用 new Promise,体现了 promise实现异步机制
2和3 使用 Promise.resolve
第3个例子,通过 then 将 参数传递到下一个 then
将代码复制 运行,就会看到 promise的奥秘

//new Promise() vs Promise.resolve()
//then 方法每次都会返回 promise实例对象

function newPromise_resolve() {
   return new Promise((resolve,reject) => {
      resolve(); //这里调resolve方法,则then方法会被调用
      console.log('resolve里面的log');
   })
   //先输出 resolve里面的log
   //后输出 then方法
   //这里很好地体现了 Promise实现了 node.js的异步机制
}

newPromise_resolve().then(() => {
   console.log('then方法');
});

newPromise_resolve();

//使用Promise.resolve
function promise_resolve() {
   let promise = Promise.resolve();
   promise
   .then(() => {
      console.log('promise_resolve1');
   })
   .then(() => {
      console.log('promise_resolve2');
   });

   return promise;
}

//promise_resolve(); 

function promise_forEach_then() {
   let ids = [1,2,3];
   let promise = Promise.resolve();
   ids.forEach((id) => {
      promise
      .then(() => {
         return {id}
      })
      .then(consoleLogId)
   });
}

function consoleLogId(id) {
   console.log('promise_forEach_then---' + id);
}

//promise_forEach_then();

///////////////////////////////////////

        public deatoryGroupRes( $groupName : string ) : Promise{
            if( this._hashmap.containsKey( $groupName ) == true ){
                if( this._is_loading == true && $groupName == this._cur_group ){
                    return new Promise((resolve,reject) : void=>{
                        resolve(false);
                                                reject(false);
                    });
                }else{
                    this._hashmap.remove( $groupName );
                    return RES.destroyRes( $groupName );
                }
            }else{
                return RES.destroyRes( $groupName );
            }
        }

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...