Apache flex AS3-如何进行异步调用的同步加载?

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;

我有一个从web服务异步加载用户对象的函数

我将这个函数调用包装在另一个函数中并使其同步

例如:

    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,我们从来没有遇到过问题

如果要确保应用程序在返回结果/错误之前不会呈现新视图或执行其他逻辑,可以执行以下操作:

  • 为将调用“post结果/错误代码”的自定义事件附加事件侦听器
  • 进行异步调用
  • 处理结果/故障
  • 调度自定义事件以从#1触发侦听器
  • 请记住,每次进行异步调用时,这将导致大量烦人的boilterplate代码。我会非常仔细地考虑你是否真的需要一个同步的执行路径。

    这里见我的答案:

    Flex和flashremoting本质上是异步的,所以反对这种模式会给你带来很多麻烦。我们的服务委托从每个方法返回AsyncToken,我们从来没有遇到过问题

    如果要确保应用程序在返回结果/错误之前不会呈现新视图或执行其他逻辑,可以执行以下操作:

  • 为将调用“post结果/错误代码”的自定义事件附加事件侦听器
  • 进行异步调用
  • 处理结果/故障
  • 调度自定义事件以从#1触发侦听器

  • 请记住,每次进行异步调用时,这将导致大量烦人的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.