Actionscript 3 JSON.parse(…).reelarray为空-ActionScript
作为回报,我得到Actionscript 3 JSON.parse(…).reelarray为空-ActionScript,actionscript-3,Actionscript 3,作为回报,我得到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/getspi
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;
}
嗯,
sendLoaders.load()
是一个异步事件,您的函数返回null,因为当函数返回时,botCompleted()
函数没有触发
您需要在botComplete函数中继续执行(如果在每次spin()之后需要执行不同的操作,您可以传递一个被执行的函数)
嗯,
sendLoaders.load()
是一个异步事件,您的函数返回null,因为当函数返回时,botCompleted()
函数没有触发
您需要在botComplete函数中继续执行(如果在每次spin()之后需要执行不同的操作,您可以传递一个被执行的函数)
urloader.load
是一种异步方法,它意味着它生成一个进程来加载URL,并且继续执行spin
。因此它立即返回一个值。botCompleted
功能在稍后完成请求时执行。诸如此类:
sendLoaders.load()
return value
botCompleted()
因此,您应该依赖于botCompleted函数,而不是返回值。取决于解码结果的所有逻辑都应在botCompleted
功能内触发
function botCompleted(e:Event):void {
decoded = JSON.parse(e.currentTarget.data);
handleDecodedResult(decoded);
}
urloader.load
是一种异步方法,它意味着它生成一个进程来加载URL,并且继续执行spin
。因此它立即返回一个值。botCompleted
功能在稍后完成请求时执行。诸如此类:
sendLoaders.load()
return value
botCompleted()
因此,您应该依赖于botCompleted函数,而不是返回值。取决于解码结果的所有逻辑都应在botCompleted
功能内触发
function botCompleted(e:Event):void {
decoded = JSON.parse(e.currentTarget.data);
handleDecodedResult(decoded);
}
我希望我的spin
方法返回解码后的值。那么我如何更改
我的密码
这是不可能的。JSON数据是异步加载的,但函数是同步返回的。换句话说,spin()
函数立即返回(与所有函数一样),但是urloader
直到稍后才完成。在return
语句之前编写botCompleted
处理程序并不重要,直到稍后才会调用它。这就是事件处理程序的用途:处理异步事件
您可以做的是传入回调函数。例如:
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中)
我希望我的spin
方法返回解码后的值。那么我如何更改
我的密码
这是不可能的。JSON数据是异步加载的,但函数是同步返回的。换句话说,spin()
函数立即返回(与所有函数一样),但是urloader
直到稍后才完成。在return
语句之前编写botCompleted
处理程序并不重要,直到稍后才会调用它。这就是事件处理程序的用途:处理异步事件
您可以做的是传入回调函数。例如:
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中),。我只想让tht方法返回值,那么我如何更改我的代码当我调用spin方法时,它应该返回我解码的val,那么我如何更改我的代码。你能帮我一下吗?嗯,这是不可能的。您可以使用诸如promises之类的技术对代码进行伪同步。但是仍然需要重写代码。你不能“只返回值”,因为在执行时没有值,你必须等待完整的处理程序,然后对返回值执行你应该执行的任何操作。您需要重新构造代码以处理此问题。如果您显示更多(调用spin()并使用返回值),我们可以帮助您更好地更改它,就像我给出的说明一样,但是我觉得你不理解异步的概念-你可能应该仔细阅读一下,我只是想让这个方法返回值,那么我如何更改我的代码当我调用一个spin方法时,它应该返回我解码的val,那么我如何更改我的代码。你能帮个忙吗。您可以使用诸如promises之类的技术对代码进行伪同步。但是仍然需要重写代码。你不能“只返回值”,因为在执行时没有值,你必须等待完整的处理程序,然后对返回值执行你应该执行的任何操作。您需要重新构造代码以处理此问题。如果您显示更多(调用spin()并使用返回值),我们可以帮助您更好地更改它,就像我给出的说明一样,但是我感觉你不理解异步的概念-你可能应该仔细阅读它…我希望我的spin方法返回解码的值。所以我怎么能更改我的代码。这是不可能的。您需要重新构造代码以异步工作。任何依赖于
spin()
返回解码值的代码都不能依赖于spin()
返回解码值。或者您需要在调用spin()
之前移动JSON加载。或者,您可以将回调传递到spin()
,以在完成时处理JSON。等等,thanq…我希望我的spin方法返回解码后的值。那么我如何更改我的代码。这是不可能的。您需要重新构造代码以异步工作。任何代码都依赖于spin()