Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 JSON.parse(…).reelarray为空-ActionScript_Actionscript 3 - Fatal编程技术网

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()