我正在寻找一个好的设计模式来跟踪一堆不同的异步JavaScript活动(图像加载,多个AJAX调用,有序的AJAX调用等等),这比仅仅很多自定义回调和自定义状态变量更好.你建议我用什么?是否有任何类型的队列系统能够具有超越排序的逻辑?
我有一个启动序列,涉及许多异步进程(加载图像,等待定时器,进行一些ajax调用,进行一些初始化).一些异步流程可以同时启动(加载图像,AJAX调用),有些必须排序(运行AJAX调用#1,然后运行AJAX调用#2).现在,我已经完成了所有关闭回调函数和一系列全局状态的操作,这些状态跟踪已完成或未完成的内容.它有效,但它很乱,我有一些错误,因为确保你正确处理所有排序可能性和错误条件的复杂性.
当你遇到问题时,调试也很麻烦,因为它就像海森堡的不确定性原理.只要在序列中的任何位置设置断点,一切都会发生变化.您必须在代码中放置各种调试语句,以试图辨别正在发生的事情.
这是一个更具体的描述:
有三个图像加载.加载一个特定图像后,我想显示它.一旦显示一段时间后,我想显示第二张图像.第三个进入队列以便稍后显示.
有三个AJAX调用必须按连续顺序发生(一个的输出用作下一个输入的一部分).
当完成AJAX调用时,需要对结果进行大量JS处理,然后需要加载另外两个图像.
加载这两个图像时,还有一些显示内容要做.
完成所有操作后,您可以检查其中一个图像的显示时间,如果已经过了足够的时间,则显示下一个图像.如果没有,请在显示下一张图像之前再等一会儿.
每个步骤都有成功和错误处理程序.一些错误处理程序启动了仍可成功继续的备用代码.
我不希望任何人在这里遵循确切的过程,只是为了让人们了解这些步骤之间的逻辑类型.
编辑:我遇到了YUI的AsyncQueue,它不是我遇到的问题类型的完整解决方案,但是在同一个空间.对于排序或排序一堆异步操作似乎更多,但我不知道它对我所做的决策类型有何帮助.