有没有办法在Flex中使用RemoteObject进行同步调用?
答案 0 :(得分:5)
Flex中的所有IO都是异步的。处理此问题的典型模式是使用AsyncResponder
。例如:
var t:AsyncToken = remoteObject.methodCall();
t.addResponder(new AsyncResponder(resultEvent, faultEvent));
答案 1 :(得分:2)
当你希望它同步时,请三思。
你知道同步是什么意思吗?它将冻结您的应用程序,直到它收到数据。除非您非常确定您的远程呼叫可以立即收到返回值(超快速网络连接)。如果你的函数调用依赖于彼此,我建议你实现一个状态机。 e.g。
在第一次异步调用后,您的状态变为STATE_1,您的下一个函数调用将检查此状态变量,以决定下一步移动(忽略当前调用或继续)。
我的2美分。答案 2 :(得分:1)
如果您想要同步行为,请在拨打电话后添加等待。
编辑:我已经为我正在讨论的链接行为添加了代码。只需在以后调用remoteObject时替换结果处理程序。...
remoteObject.function1(...);
...
private var resultHandler1(event:ResultEvent):void
{
...
remoteObject.removeEventListener(resultHandler1);
remoteObject.addEventListener(ResultEvent.RESULT, resultHandler2);
remoteObject.function2(...);
}
private var resultHandler2(event:ResultEvent):void
{
...
}
答案 3 :(得分:1)
答案 4 :(得分:0)
不,你为什么还要那样做呢。 Flex使事情异步,这样用户就不会被迫坐下来等待数据返回。 如果每次应用程序请求数据时,用户必须等待它返回,之后其他任何事情都会发生,那将是一个非常糟糕的用户。
来自评论
不,你不需要同步行为。如果您正在拨打2个电话并且呼叫2在呼叫1之前进入,但是2依赖于1内的数据那么您将离开时不要触发事件2直到1回来(这将减慢您的应用 - 就像同步事件一样)或实现一种方法来检查事件1是否已经在事件2的处理程序中返回(有很多方法可以做到这一点)。 如果您正在解雇许多事件,那么为什么没有一个包含某些描述的包装类来跟踪您的事件,并且在所有事件都回来之前不对响应做任何事情。 您可以使用AsyncToken来跟踪单个请求,因此如果您一次性触发负载,那么您可以找到最新消息,但最终没有。
答案 5 :(得分:0)
您应该尝试使用您想要接收的所有数据同时生成一个请求,然后使需要数据的不同类听取该类的正确数据。
例如:
// request
remoteobject.GetData();
// on received request
private function receivedData(evt:ResultEvent):void
{
for each (var resultobject:ResultObjectVO in evt.result)
{
var eventModel:Object;
var event:DataEvents = new DataEvents(resultobject.ResultType);
event.data = eventModel;
eventdispatcher.dispatchEvent(event);
}
}
像这样的东西。希望这会有所帮助。
答案 6 :(得分:0)
也许如果你在Flex上调用同步XMLHttpRequest
调用JavaScript,你可以这样做。
答案 7 :(得分:0)
如果您向服务器发送2个调用,那么你们都会错误地或者不使用adobe中的flex,无论每个调用对象是否具有单独的resquestObject,第二个调用对象只会在第一个调用后返回,即使是第二个处理需要1毫秒。试试斐波纳西1/40的例子。