作为回报,我得到null
值
public function spin()
{
var decoded : Object;
trace("i am innnnnnn");
var sendLoaders:URLLoader;
var sendRequests:URLRequest;
sendLoaders = new URLLoader();
sendRequests = new URLRequest("http://localhost/getspinvalue/4");
var difvar:Array = [];
sendLoaders.addEventListener(Event.COMPLETE, botCompleted);
sendLoaders.load(sendRequests);
function botCompleted(e:*)
{
decoded = JSON.parse(e.currentTarget.data);
}
trace(decoded);
return decoded.reelarray;
}
答案 0 :(得分:0)
好吧,sendLoaders.load()
是一个异步事件,你的函数返回null,因为当函数返回时botCompleted()
函数没有被触发
你需要在你的botComplete函数中继续执行(如果你需要在每次spin()之后做不同的事情,你可以传递一个被执行的函数)
public function spin() {
var decoded : Object;
trace("i am innnnnnn");
var sendLoaders:URLLoader;
var sendRequests:URLRequest;
sendLoaders = new URLLoader();
sendRequests = new URLRequest("http://localhost/getspinvalue/4");
var difvar:Array = [];
sendLoaders.addEventListener(Event.COMPLETE, botCompleted);
sendLoaders.load(sendRequests);
trace("request sent")
}
function botCompleted(e:*) {
decoded = JSON.parse(e.currentTarget.data);
trace("data recieved:" + decoded)
//CONTINUE EXECUTION HERE
}
答案 1 :(得分:0)
URLLoader.load
是一种异步方法,它意味着它会生成一个加载URL的进程,并继续执行spin
。所以它立刻返回一个值。稍后在满足请求时执行botCompleted
功能。这样的事情:
sendLoaders.load()
return value
botCompleted()
所以你应该依赖于botCompleted函数,而不是依赖于返回值。应该在botCompleted
函数内触发所有依赖于解码结果的逻辑。
function botCompleted(e:Event):void {
decoded = JSON.parse(e.currentTarget.data);
handleDecodedResult(decoded);
}
答案 2 :(得分:0)
我希望我的
spin
方法返回解码后的值。所以我该如何改变 我的代码。
这是不可能的。 JSON数据是异步加载的,但函数同步返回。换句话说,spin()
函数会立即返回(就像所有函数一样),但URLLoader
不会在稍后时间内完成。在botCompleted
语句之前编写return
处理程序并不重要,直到稍后它才会被调用。这就是事件处理程序的用途:处理异步事件。
你可以做的是传递回调函数。例如:
function spin(callback:Function):void {
var loader:URLLoader = new URLLoader();
// .. load
loader.addEventListener(Event.COMPLETE, complete);
function complete(e:Event):void {
var decoded:Object = JSON.parse(e.target.data);
callback(decoded);
}
}
现在,您可以调用spin
函数并在您调用spin
的上下文中传递匿名函数,几乎使其看起来是同步的:
spin(function(data:Object):void {
trace(data);
// Do stuff with data here
});
// Note: data is not available yet from here, only from inside the callback above
这是一种常见做法(在AS3和JS中),support。