TypeScript之异步函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TypeScript之异步函数相关的知识,希望对你有一定的参考价值。

必须搞清楚 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<string>{
            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秒`);
        }

    }
}

结果 :
技术分享图片

解释 : setTimeOut是异步的

二 :
技术分享图片

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

结果:
技术分享图片

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

以上是关于TypeScript之异步函数的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 异步代码类型技巧

如何使用 Node 和 TypeScript 获取异步堆栈跟踪?

TypeScript:用于在 setTimeout() 中返回异步函数调用的类型?

在 Typescript 中使用异步函数返回值

在 TypeScript 中使用 Promises 的异步函数的正确错误模式

使用 axios、TypeScript 模板和异步函数对 VueJS 进行单元测试