Running asynchronous tasks
Performing multiple ajax tasks asynchronously
by totszwai
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-mockjax/1.5.3/jquery.mockjax.min.js"></script>
JavaScript
$.mockjax({ url: '/test1', responseTime: 1000, responseText: "hello 1" });
$.mockjax({ url: '/test2', responseTime: 3000, responseText: "hello 2" });
$.mockjax({ url: '/test3', responseTime: 2000, responseText: "hello 3" });
var jobs = [
function() {
console.log("running task 1");
return $.get('/test1').done(function(response) {
console.log("task 1:" + response);
});
},
function() {
console.log("running task 2");
return $.get('/test2').done(function(response) {
console.log("task 2:" + response);
});
},
function() {
console.log("running task 3");
return $.get('/test3').done(function(response) {
console.log("task 3:" + response);
});
}
];
processTasksAsynchronously(jobs, { a : 2 });
function processTasksAsynchronously(tasks, object, ctx) {
if (!tasks || !tasks.length) return $.Deferred().resolve(object).promise();
var first = tasks[0];
var rest = tasks.slice(1);
var result = first.call(ctx, object);
if (result && _.isFunction(result.then)) {
return result.then(function () {
return processTasksAsynchronously(rest, object, ctx);
});
} else {
return processTasksAsynchronously(rest, object, ctx);
}
}