我需要使用有限的流进行顺序异步 ajax 请求。到目前为止,我只能在 Web 服务器上占用一个流,因此我一次只能执行一个 ajax 请求。
当我一次只能使用一个流时,我有以下功能可以帮助我。
function initiateChain() {
var i = 0;
var tasks = arguments;
var callback = function () {
i += 1;
if (i != tasks.length) {
tasks[i](callback); //block should call callback when done otherwise loop stops
}
}
if (tasks.length != 0) {
tasks[0](callback); //initiate first one
}
}
假设我有三个 ajax 辅助函数
function getGadgets(callback) {
//ajax call
callback(); // I call this in complete callback of $.ajax
}
function getBooks(callback) {
//ajax call
callback(); // I call this in complete callback of $.ajax
}
function getDeals(callback) {
//ajax call
callback(); // I call this in complete callback of $.ajax
}
以下调用确保来自该客户端的 ajax 请求不超过 1 个
initiateChain(getGadgets, getBooks, getDeals);
现在我需要增强initialChain 以支持任意数量的流。假设我被允许使用 2 或 n 个流,我想知道这样做的想法,而无需更改 ajax 辅助函数 getGadgets、getDeals、getDeals。
简而言之,我有一组函数 N,在本例中是 getGadgets、getDeals 和 getDeals(|N|=3),它们每个都需要连接到 Web 服务器。目前我一次只能执行一个请求,所以initialChain函数依次调用这三个方法。如果我可以访问 M 个连接,我想执行 |N| 并行函数(最多 M 个)。