我正在研究AS2项目。我目前有一个链接到一些PHP数据包的函数。基本上,数据包被发送,然后根据参数发回一些信息。简单,真的。
问题是原始函数需要返回该数据。所以我需要等待数据包返回才能返回。除非您不能将“return”作为听众的功能附加。
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 :(得分: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);
希望可以提供帮助。