《TypeScript图形渲染实战:2D架构设计与实现》 —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变成了属性。
- 点赞
- 收藏
- 关注作者
评论(0)