2015-07-05 79 views
2

我正在开发一个AS2项目。我目前有一个链接到一些PHP数据包的函数。基本上,数据包被发送,然后根据参数发回一些信息。简单,真的。AS2等待退货

问题是原始函数需要返回该数据。所以我需要它等待包回来才能返回。除了你不能附加“返回”作为一个听众的功能。

function handleReturnNicknameById(id) 
{ 
    nFunctionComplete = 0; 
    trace("api : handleGetSwidById"); 
    AIRTOWER.send(AIRTOWER.PLAY_EXT, "friends#getPlayerInfoById", [id], "str", SHELL.getCurrentServerRoomId()); 
    AIRTOWER.addListener('getPlayerInfoById', handleReturnNickname); 
    while(nFunctionComplete < 700) 
    { 
     if(nickReady == true) 
     { 
      nFunctionComplete = 701; 
      return(nickToReturn); 
     } 
     nFunctionComplete++; 
    } 
} 
function handleReturnNickname(obj) 
{ 
    AIRTOWER.removeListener('getPlayerInfoById', handleReturnNickname); 
    obj.shift(); 
    nickToReturn = obj[1]; 
    nickReady = true; 
} 

这是我得到它的唯一想法。我知道这是非常无效的,这就是为什么我在这里寻求帮助。

最终问题是:在AS2中,你可以在返回之前使函数“等待”吗?

回答

0

要做你正在寻找的东西,你可以使用callback function当你的数据加载时会被调用。所以,你的代码是这样的:

function handleReturnNicknameById(id:Number, callback:Function): Void 
{ 
    AIRTOWER.send(AIRTOWER.PLAY_EXT, "friends#getPlayerInfoById", [id], "str", SHELL.getCurrentServerRoomId()); 
    AIRTOWER.addListener('getPlayerInfoById', handleReturnNickname); 

    function handleReturnNickname(obj): Void 
    { 
     AIRTOWER.removeListener('getPlayerInfoById', handleReturnNickname); 
     obj.shift(); 
     var nickToReturn = obj[1]; 

     // run the callback function and pass the needed data 
     callback(nickToReturn); 
    } 

} 

// this function is called only when data is loaded 
function my_callback(data): Void 
{ 
    // here you can use your data 
    trace('loaded data : ' + data); 
} 

,并执行所有:

handleReturnNicknameById(id, my_callback); 

希望能有所帮助。