Мне нужно сделать последовательные асинхронные запросы ajax с ограниченными потоками. На данный момент мне разрешено занимать только один поток на веб-сервере, поэтому я могу выполнить только один запрос ajax.Как выполнить последовательные асинхронные запросы 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
}
}
Скажет, если у меня есть три АЯКС вспомогательных функций
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
}
следующих вызова гарантирует, что запрос не более 1 Аякса не сделан от этого клиента
initiateChain(getGadgets, getBooks, getDeals);
Теперь мне нужно усилить initiateChain для поддержки произвольного количества потоков. Скажем, мне разрешено использовать 2 или n количество потоков, которые я хотел бы знать, чтобы сделать это, не меняя вспомогательные функции ajax getGadgets, getDeals, getDeals.
Короче говоря, у меня есть набор функций, N, в этом случае getGadgets, getDeals и getDeals (| N | = 3), для каждого из которых требуется подключение к веб-серверу. В настоящее время я могу выполнять только один запрос за раз, поэтому функция initiateChain вызывает три метода в последовательности. Если бы у меня был доступ к M-соединениям, я хотел бы выполнить | N | функции параллельно (до максимума M).
Что именно ваш вопрос? – jfriend00
Как я уже говорил У меня есть набор функций, N, в этом случае getGadgets, getDeals и getDeals (| N | = 3), для каждого из которых требуется подключение к веб-серверу. В настоящее время я могу выполнять только один запрос за раз, поэтому функция initiateChain вызывает три метода в последовательности. Если бы у меня был доступ к M-соединениям, я хотел бы выполнить | N | функции параллельно (до максимума M). – harsha