Apache flex AS3-如何进行异步调用的同步加载?
我有一个从web服务异步加载用户对象的函数 我将这个函数调用包装在另一个函数中并使其同步 例如:Apache flex AS3-如何进行异步调用的同步加载?,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我有一个从web服务异步加载用户对象的函数 我将这个函数调用包装在另一个函数中并使其同步 例如: private function getUser():User{ var newUser:User; var f:UserFactory = new UserFactory(); f.GetCurrent(function(u:User):void{ newUser = u;
private function getUser():User{
var newUser:User;
var f:UserFactory = new UserFactory();
f.GetCurrent(function(u:User):void{
newUser = u;
});
return newUser;
}
UserFactory.GetCurrent看起来像这样:
public function GetCurrent(callback:Function):void{ }
但我的理解是,不能保证当调用这个函数时,newUser实际上就是新用户
如何在Flex中实现这种类型的返回函数?如果没有“sleep()”之类的函数,就无法将异步调用转换为同步调用,据我所知,它在AS3中缺失。是的,不能保证newUser在return语句之前包含用户名。如果没有类似“sleep()”的函数,您无法将异步调用转换为同步调用,据我所知,它在AS3中缺失。是的,不能保证newUser在返回语句之前包含用户名。请参见我的回答: Flex和flashremoting本质上是异步的,所以反对这种模式会给你带来很多麻烦。我们的服务委托从每个方法返回AsyncToken,我们从来没有遇到过问题 如果要确保应用程序在返回结果/错误之前不会呈现新视图或执行其他逻辑,可以执行以下操作:
请记住,每次进行异步调用时,这将导致大量烦人的boilterplate代码。我会非常仔细地考虑你是否真的需要一个同步的执行路径。 < P>这种疯狂是谎言。 说真的,你最好不要强迫异步调用进入某种同步架构。了解事件处理系统如何对您有利,并为结果事件添加处理程序。事实上,以下是直接来自常见问题解答的建议: 问:如何进行同步数据调用? 答:您不能进行同步呼叫。您必须使用结果事件。不 您不能使用循环、setInterval甚至callLater。这种范式是 一开始很让人恼火。深吸一口气,向敌人投降 抵抗是不可避免的,也是徒劳的。 有一种通用的方法来处理数据服务的异步性质 调用ACT(异步调用令牌)。在中搜索此项 开发Flex应用程序文档以获取完整描述。
这样,疯狂就是谎言 说真的,你最好不要强迫异步调用进入某种同步架构。了解事件处理系统如何对您有利,并为结果事件添加处理程序。事实上,以下是直接来自常见问题解答的建议: 问:如何进行同步数据调用? 答:您不能进行同步呼叫。您必须使用结果事件。不 您不能使用循环、setInterval甚至callLater。这种范式是 一开始很让人恼火。深吸一口气,向敌人投降 抵抗是不可避免的,也是徒劳的。 有一种通用的方法来处理数据服务的异步性质 调用ACT(异步调用令牌)。在中搜索此项 开发Flex应用程序文档以获取完整描述。 具有在模型视图控制器上下文中实现同步操作的机制。它不尝试同步异步调用,但它允许您添加一个同步应用程序模式来控制它们 下面是一个示例实现: 在本例中,五个子命令按顺序运行,共同构成一个完整的命令。在您的示例中,您将以命令的形式实现
getUser()
,该命令将在getURL()
(或任何)回调中调用commandComplete()
。这意味着下一个命令将确保getUser()
操作已完成 具有在模型视图控制器上下文中实现同步操作的机制。它不尝试同步异步调用,但它允许您添加一个同步应用程序模式来控制它们
下面是一个示例实现:
在本例中,五个子命令按顺序运行,共同构成一个完整的命令。在您的示例中,您将以命令的形式实现
getUser()
,该命令将在getURL()
(或任何)回调中调用commandComplete()
。这意味着下一个命令将确保getUser()
操作已完成 真的疯了?写这篇文章的人疯了吗?如果异步做某事没有意义,那么同步做也没有什么疯狂的,例如加载资源或初始化某些东西时,如果上一步还没有完成,那么下一步就没有意义了。疯狂真的吗?写这篇文章的人疯了吗?如果异步做某事没有意义,那么同步做也没有什么疯狂的,例如加载资源或初始化某些东西时,
Q: How do I make synchronous data calls?
A: You CANNOT do synchronous calls. You MUST use the result event. No,
you can't use a loop, or setInterval or even callLater. This paradigm is
quite aggravating at first. Take a deep breath, surrender to the
inevitable, resistance is futile.
There is a generic way to handle the asynchronous nature of data service
calls called ACT (Asynchronous Call Token). Search for this in
Developing Flex Apps doc for a full description.