Gra*_*ham 6 javascript queue jquery jquery-1.5 jquery-deferred
我一直在jquery 1.5中测试新的延迟AJAX函数,并且对它们的简单性和强大功能印象深刻.我有一个更大的问题与排队这些请求的最佳方式有关.
我有两种情况:串行和并行,如果你愿意的话.我想避免同步/异步术语,因为我确实希望所有这些都是异步请求,因此用户可以在等待队列处理时执行其他操作.然后我想在队列完成处理时调用单个函数.
在具有两个请求的"串行模式"中,我希望它们按如下方式处理:
RequestA - > ResponseA - > RequestB - > ResponseB - > EndOfQueue
在具有两个请求的"并行模式"中,我想要这个结果:
RequestA - > RequestB(ResponseA,响应B在准备就绪时处理) - > EndOfQueue
在任何一种情况下,如果任何请求失败,我希望队列停止并将控制传递给失败函数.
我有要求指定动态队列长度所以我不认为我能够将一堆.then()或.when()延迟串起来,因为我不知道它是一百件还是一百件.我正在通过供应商的API在服务器上执行业务逻辑,因此服务器端批处理将很困难,因为我无法控制该代码.
我已经构建了执行"并行"情况的测试用例,并在所有成功完成后调用了when()函数,但这些测试在队列长度上不是动态的,并且不能移植到串行模型.
我可以看到如何创建一个自定义队列对象来处理这个问题,但似乎所有的部分都已经在jquery(?)中为我编写了.我看过了,但还没有找到以这种方式涵盖顺序请求的示例.
有关如何使用jquery队列/延迟功能处理此问题的任何想法?
实现 RequestA -> ResponseA -> RequestB -> ResponseB 顺序的最简单方法是使用如下内容:
var queue = [];
function qNext() {
$.ajax(queue.shift()).success(qNext);
}
function qAjax(options) {
queue.push(options);
}
qAjax({
// $.ajax options
});
qAjax({
// $.ajax options
});
qNext();
Run Code Online (Sandbox Code Playgroud)
请参阅演示。
这是您的要求的稍微简化的版本,但是添加回调以在队列为空后运行会很容易。
您确定不想要 RequestA -> RequestB -> ResponseA -> ResponseB 的顺序吗?