`

Flex的异步调用可能会导致的问题及解决办法

    博客分类:
  • Flex
 
阅读更多

在Flex中,对远程服务的访问都是异步的,所谓“异步”就是方法调用之后,当前线程并不阻塞以等待调用结果的返回,而是继续执行下一行代码。Flash Player中会有其他线程守候远程方法调用结果。当远程方法调用结果(可能调用成功,也可能因某种原因失败)返回后,守候线程会以“事件”的形式通知应用进行相应的处理。因此,远程方法调用结果都是在调用结果相关的事件侦听器中处理的。

异步调用非常容易理解,笔者在这里总结了项目中异步调用所带来的两个常见问题,希望引起读者的注意,在项目开发的早期予以重视。


1.异步调用导致模型数据不一致


在Flex中进行远程调用时,远程调用结果未返回前,Flex不会阻塞用户当前的线程,因此用户的操作会导致以不同参数多次对同一个远程调用。由于无法保证这些远程调用结果的返回顺序,因此可能会造成调用参数与得到的最后结果不匹配,这就造成了数据模型的不一致。图2-6所示界面就是一个典型的例子,这个人机界面主要完成用户档案管理功能,界面左侧是一个用户列表,右侧是用户列表中当前所选用户记录的档案信息面板。为了提高性能,将这个功能设计为当操作者通过鼠标或者键盘选中用户列表中的一条用户记录后才调用远程方法从服务器中获取用户的档案信息。由于开发者没有考虑到异步调用的问题,这个界面的第一个版本出来之后,一个非常有趣的现象出现了:当测试者快速点击左侧的用户列表中不同的用户记录时,窗口右侧的用户档案面板上的用户档案与最后所选择的用户不一致,出现了“张冠李戴”的现象。


2.异步调用导致用户反复(误)操作

在Flex中进行远程调用时,远程调用结果未返回前Flex不会阻塞用户当前的线程,用户还可以继续操作当前的人机界面。如果远程调用比较耗费性能,需要等上几秒钟才能返回。如果人机界面上没有执行相应的处理,那么有些性急的用户以为自己所做操作(比如按钮的点击)没起作用(因为他没有立即看到结果),因此可能会不停地执行这个操作。比如,不停地点击同一个按钮。这就使得本来耗费性能的服务被请求多次。图2-7所示的窗口就是一个典型的范例,这个窗口完成了一个统计功能,当用户点击“统计”按钮后调用远程服务进行统计,并将结果返回到数据表格中。由于开发者没有考虑到异步调用的问题,当操作者点击统计按钮后,表格中没有立即出现统计数据,因此操作者误以为按钮失效,于是连续点击“统计”按钮多次,导致向服务器发送了多次统计请求,严重地浪费了服务器的资源。

对于这两个问题,通用的解决方案就是在执行远程调用前弹出一个有模式窗口阻止用户继续在原界面上进行鼠标键盘操作,同时显示提示文字或进度条。
分享到:
评论

相关推荐

    flex 异步加载tree

    根据给定的信息,我们可以深入探讨Flex中的异步加载Tree组件的相关知识点。 ### 一、Flex与AsyncTree组件 #### 1. Flex简介 Flex是一种开源的框架,用于构建跨平台的桌面应用程序和移动应用程序。它提供了强大的...

    flex air 调用C代码

    3. **同步和异步调用**: - **同步模式**:在这种模式下,调用C函数会阻塞Flex应用,直到C程序执行完毕并返回结果。这通常适用于执行时间较短的简单任务。 - **异步模式**:在异步模式中,调用C函数不会阻塞Flex...

    Flex调用Webservice及java程序

    调用Web服务时可能会出现各种错误,如网络问题、服务不可用等。在Flex中,我们需要适当地处理这些错误,通常通过监听`fault`事件并捕获`FaultEvent`来实现。 7. **部署和测试** 完成Flex应用的开发后,需要将其...

    flex4.6 air 异步操作sqlite数据库

    在传统的同步操作中,程序会等待数据库操作完成才会执行下一步,这可能导致用户界面冻结,尤其是在执行耗时的查询或大量数据插入时。而异步操作则允许应用程序在后台执行数据库任务,同时保持UI的响应性,提高用户...

    ArcGIS Flex API 中的 Flex 技术-异步特征

    虽然Flex天生支持异步调用,但在某些情况下,开发者可能希望实现同步行为。例如,通过`WebService Components`可以实现一定程度上的同步调用。然而,即使是使用`RemoteObject`进行数据交互时触发的`invoke`事件来...

    flex 调用新浪微博接口类库整理

    例如,网络连接问题、API限制、无效的访问令牌等都可能导致错误,应确保有适当的错误处理机制。 综上所述,"flex调用新浪微博接口类库整理"涉及到的技术点包括Flex的ExternalInterface使用、OAuth认证流程、微博API...

    Flex与Flash相互调用

    - Flash和Flex之间的通信可能存在延迟,因为`ExternalInterface`调用是异步的。 - 如果Flash内容是在另一个域中,可能需要处理跨域安全策略文件。 通过以上步骤,我们可以在Flex和Flash之间实现双向通信,充分利用...

    flex与JS实现互相调用

    1. ExternalInterface:这是Flash Player提供的一个API,使得ActionScript能够调用JavaScript函数,同时也允许JavaScript调用Flex中的方法。这个接口在Flex中是公开的,无需额外引入库或设置。 2. CallBack:为了...

    ArcGIS Server Flex API调用GP服务的一般步骤

    如果不设置,运行 GP 工具生成的结果将默认保存在 C 盘下,这可能会导致 GP 服务无法读取结果图层。可以通过在 ArcToolbox 上右键选择 Environment 并设置 `scratchworkspace` 的路径来解决这一问题。 - **GP 工具...

    C#与flex交互

    在实际开发中,需要注意错误处理和性能优化,例如,确保调用方法的参数类型匹配,防止跨域安全问题,以及合理使用异步调用来避免阻塞UI线程。 以上就是关于C#与Flex交互的详细步骤和知识点,理解并掌握这些内容,...

    flex与JS交互示例

    Flex与JavaScript交互是Web开发中的一个重要技术,...在实际项目中,可以根据需求进一步扩展,如传递复杂数据结构、处理异步调用、错误处理等。对于开发者来说,掌握这项技能能极大地提高Web应用的交互性和功能多样性。

    Flex中函数传值调用Demo

    具体的实现方式可能包括事件监听、回调函数、类方法调用等。通过阅读和分析这些代码,可以更好地理解上述概念。 总之,"Flex中函数传值调用Demo"是一个实践性的教程,旨在帮助开发者理解和掌握在Flex环境中如何有效...

    Java_Flex,Java_Flex,Java_Flex

    - 错误处理:良好的错误处理机制能及时发现并解决可能出现的问题。 - 性能优化:监控和优化数据传输,减少不必要的网络延迟。 总的来说,Java_Flex的集成为开发者提供了构建高性能、高交互性的Web应用的途径。通过...

    flex 与java后台整合 PPT

    提供的“flex和j2ee整合.doc”文档很可能是关于这个整合过程的详细指南,包含了步骤、配置示例以及可能遇到的问题和解决方案。阅读这份文档将有助于深入理解Flex与Java的整合技术。 综上所述,Flex与Java的整合是...

    Flex调用webService

    在实际应用中,还需要考虑错误处理、异步调用的回调函数、数据绑定以及可能的安全配置。此外,对于更复杂的数据类型,可能需要自定义解析逻辑。Flex提供了丰富的工具和API,使得开发者能灵活地处理各种类型的数据...

    flex与数据库交互

    为了提高性能,可以考虑缓存结果、批量处理数据、异步调用服务以及合理设计WebService接口,减少不必要的网络通信。 总结来说,Flex通过HTTPService组件与WebService进行通信,进而与远程数据库进行数据交互。这为...

    flex 和 js 交互

    3. **callJSFunction**:一旦注册了JavaScript函数,就可以在Flex中通过ExternalInterface.call方法调用它。例如,如果你有一个名为`displayMessage`的JavaScript函数,你可以这样调用: ```actionscript var ...

    Flex WebService Demo

    Flex WebService Demo是一个示例项目,它展示了如何在Adobe Flex应用程序中使用Web...同时,这个Demo还可能演示了如何处理异步调用、数据转换、以及如何将服务器数据适配到Flex组件上,这些都是Flex开发中的核心技能。

    flex+as3 聊天及wsdl通信

    - 异步调用:Flex中的Web服务调用通常是异步的,这意味着在等待响应时,应用可以继续执行其他任务,提高了用户体验。 4. 源码分析: 压缩包中的“ruby1688_HK.rar”和“THChatMachine.rar”可能包含示例项目的源...

    flex与java通信

    - Flex客户端调用:在Flex中使用HTTPService或WebService组件,配置URL和方法名,调用Java服务。 2. SOAP通信: - Java Web Service:使用JAX-WS或Apache CXF等库创建符合SOAP规范的Web服务。 - WSDL:编写WSDL...

Global site tag (gtag.js) - Google Analytics