博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TypeScript之异步函数
阅读量:5927 次
发布时间:2019-06-19

本文共 3089 字,大约阅读时间需要 10 分钟。

必须搞清楚 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#有线程的概念!!!

其他补充 :

下面有三个使用到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.resolvefunction 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 ); } }

转载于:https://blog.51cto.com/aonaufly/2094805

你可能感兴趣的文章
Panels 使用教程
查看>>
C 语言中堆栈的理解
查看>>
【C++学习】函数对象和Lambda表达式
查看>>
【转载】关于MVC4.0 WebAPI上传图片重命名以及图文结合
查看>>
Unicode下CString与char *相互转换
查看>>
CheckListBox怎样得到多选值?
查看>>
Java中基本数据类型和包装数据类型在Hibernate中使用
查看>>
Python入门指南
查看>>
Linux tail 命令详解
查看>>
SQL之merge into 批量更新数据
查看>>
使用 PHPnow 搭建 PHP 环境[图]
查看>>
awk 数组实例(转)
查看>>
波特词干算法
查看>>
HashMap和Hashtable及HashSet的区别
查看>>
JPA各种类型映射处理
查看>>
uva10382 Watering Grass
查看>>
JavaScript监控当前cpu使用状况
查看>>
TELERIK的RADASYNCUPLOAD控件学习二
查看>>
TCP/IP - TCP三次握手过程
查看>>
将window下mysql的数据导入到centOS的mysql workbench中
查看>>