Edit in JSFiddle

var log = function(content){
    $('<p/>').html(content).appendTo('#log');
}

function doTask1(){
    // Create a new process.
    var defer = $.Deferred();
    
    // Start main task in the process.
    setTimeout(function(){
        var rslt = Math.floor(Math.random() * 10);
        log("Task 1 returned " + rslt);
        
        // End the process after successful finish.
        // Pass the result to callbacks.
        defer.resolve(rslt);
    }, 500);
    
    // Return read-only version of the process.
    return defer.promise();
}
    
function addTask(i){
    var defer = $.Deferred();
    setTimeout(function(){
        var rslt = Math.floor(Math.random() * 10);
        log("addTask finished with " + rslt);
        defer.resolve(i + rslt);
    }, 500);
    return defer.promise();
}
    
function multiplyTask(i){
    var defer = $.Deferred();
    setTimeout(function(){
        var rslt = Math.floor(Math.random() * 10);
        log("multiplyTask finished with " + rslt);
        defer.resolve(i * rslt);
    }, 500);
    return defer.promise();
}
    
$(function(){
    // Start task1 in a new process.
    var task1 = doTask1();
    
    // Chain next task in a 2nd process based on task1's result.
    var final = task1.then(function(rslt){
        if(rslt >= 5)
            return addTask(rslt);
        else
            return multiplyTask(rslt);
    });

    // Attach success callback to 2nd process.
    final.done(function(rslt){
        log("All tasks finished with " + rslt);
    });
});
<div id="log"></id>