《TypeScript图形渲染实战:2D架构设计与实现》 —2.4.9 调用回调函数

举报
华章计算机 发表于 2019/12/12 18:52:05 2019/12/12
【摘要】 本节书摘来自华章计算机《TypeScript图形渲染实战:2D架构设计与实现》 一书中第2章,第2.4.9节,作者是步磊峰。

2.4.9  调用回调函数

  下面来看一下如何使用doGetAsync,以及如何使用回调函数(或方法)。具体代码如下:

 

HttpRequest.doGetAsync( "level.proc", ( response : HttpResponse ) :

void => {

    //请求成功或失败都是在回调函数中处理

    if ( response . success === true ) {

        //将response转换为string类型,因为知道是文本文件

        str = response . response as string ;

        //设置要解析的字符串

        tokenizer . setSource( str ) ;

        while ( tokenizer . moveNext ( ) ) {

            if ( tokenizer . current . type === ETokenType . NUMBER ) {

                console . log ( " NUMBER : " + tokenizer . current . getFloat

                ( ) ) ;

            }

            else {

                console . log ( " STRING : " + tokenizer . current . getString

                ( ) ) ;

            }

        }

    } else {

        console . log( " 请求失败 ! ! ! " ) ;

    }

} ) ;

 

 

  从上述代码中我们可以看到,请求成功或失败的处理都是在回调函数(或方法)中。下面来对比一下回调函数(或方法)的使用和声明代码:

 

// 使用回调函数,其中返回类型用冒号,=>符号后面是函数体代码

( response : HttpResponse ) : void => { 处理代码 } ;

 

// 声明回调函数类型,=>符号后面是返回类型

( response : HttpResponse ) => void ;

  也可以使用函数对象来赋值调用,实现一个函数名为processHttpResponse,代码如下:

 

function processHttpResponse ( response : HttpResponse ) : void {

    if ( response . success === true ) {

        //将response转换为string类型,因为知道是文本文件

        str = response . response as string ;

        //设置要解析的字符串

        tokenizer . setSource( str ) ;

        while ( tokenizer . moveNext ( ) ) {

            if ( tokenizer . current . type === ETokenType . NUMBER ) {

                console . log ( " NUMBER : " + tokenizer . current . getFloat

                ( ) ) ;

            }

            else {

                console . log ( " STRING : " + tokenizer . current . getString

                ( ) ) ;

            }

        }

    } else {

        console . log ( " 请求失败 ! ! ! " ) ;

    }

}

 

  然后调用函数对象,代码如下:

 

HttpRequest.doGetAsync( "level.proc" , processHttpResponse ) ;

 

  最后一种方式是使用type来重新定义回调函数,然后再看看如何使用。在Http Request.ts中输入如下代码:

 

export type RequestCB = ( ( response : HttpResponse ) => void ) ;

 

  看一下如何调用RequestCB。具体代码如下:

 

//使用RequestCB作为回调函数的类型,使用=> { }进行调用

//此时你会发现没有response形参,这时候可以使用RequestCB.response获取response

参数

HttpRequest . doGetAsync ( "level.proc" , RequestCB => {

    if ( RequestCB . success === true ) {

        //将response转换为string类型,因为知道是文本文件

        str = RequestCB . response as string ;

        //设置要解析的字符串

        tokenizer . setSource ( str ) ;

        while ( tokenizer . moveNext ( ) ) {

            if ( tokenizer . current . type === ETokenType . NUMBER ) {

                console . log ( " NUMBER : " + tokenizer . current . getFloat

                ( ) ) ;

            }

            else {

                console . log ( " STRING : " + tokenizer . current . getString

                ( ) ) ;

            }

        }

    }

} ) ;

  这种使用type来重定义回调函数的方式,更加清晰易读。如上述代码所示,需要注意的是,原来的回调函数形参response变成了属性。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。