Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Language agnostic 异步加载/错误处理_Language Agnostic_Design Patterns_Error Handling_Asynchronous - Fatal编程技术网

Language agnostic 异步加载/错误处理

Language agnostic 异步加载/错误处理,language-agnostic,design-patterns,error-handling,asynchronous,Language Agnostic,Design Patterns,Error Handling,Asynchronous,比如说,我在一个矩阵中有一堆对象缩略图,我需要通过HTTP网络为所有这些对象加载一些数据文件。例如,每个缩略图都有缩略图图像本身和一个xml文件 从IO错误到错误的URL,再到格式错误的XML,等等,都有可能出错。问题是,组织这一切的最佳/最优雅/最稳健的方式是什么。我通常会使用一个负载管理器来告诉 子对象开始加载,然后监视加载。子对象具有IO错误和HTTP状态事件的侦听器。当所有的孩子都加载了一些可能失败的东西时,就会显示缩略图或者其他什么 我在想,必须有一种更好的方法来做到这一点,在出现错误

比如说,我在一个矩阵中有一堆对象缩略图,我需要通过HTTP网络为所有这些对象加载一些数据文件。例如,每个缩略图都有缩略图图像本身和一个xml文件

从IO错误到错误的URL,再到格式错误的XML,等等,都有可能出错。问题是,组织这一切的最佳/最优雅/最稳健的方式是什么。我通常会使用一个负载管理器来告诉 子对象开始加载,然后监视加载。子对象具有IO错误和HTTP状态事件的侦听器。当所有的孩子都加载了一些可能失败的东西时,就会显示缩略图或者其他什么

我在想,必须有一种更好的方法来做到这一点,在出现错误时允许我使用throw子句。当然,从听众那里扔东西不会有多大好处。那该怎么办呢。在子对象中有一个本地标志,如果出现故障或什么情况,则中止

我使用的是AS3,但对于其他语言,问题应该差不多相同,至少对于面向对象的语言


我要明确的是,我不是在寻找任何程序代码,只是寻找设计模式的一般想法。我还意识到,由于异步负载,我至少在子对象中绑定到事件处理

我使用一个队列包,它能够处理各种异步操作。很好的一点是,您可以将这些操作嵌套在复合模式中,并轻松创建相当复杂的内容。如果事件发生,您可以在事件在队列树上冒泡时在根位置捕捉它们,也可以直接在事件发生的位置捕捉它们,具体取决于您添加的侦听器

interface Qable extends IEventDispatcher {
   function start()
   function stop()
}
interface Q extends Qable {
   function add(item:Qable):Q
   function remove(item:Qable):Q
   ...
}

var q1: Q = new Q
q1.add(new Qable(...))
q1.add(new Qable(...))

var q : Q = new Q
q.addEventListener(Event.COMPLETE, onComplete)
q.addEventListener(Event.ERROR, onError)
q.add(new Qable(...))
q.add(new Qable(...)).addEventListener(Event.Error, onItemXError)
q.add(m1)

q.start()

我懂了。因此,这将允许我将大多数事件处理逻辑转移到队列的顶级管理器。我想,向队列对象添加等待/加载/成功/失败状态也会很方便。非常聪明,谢谢。是的。客户机代码变得非常结构化和简单。我的实现可以在