Ny deffered test

by Bjolja

HTML

<span id="output"></span>

JavaScript

$(function () {
    var def = $.Deferred();
    var promise = def.promise();

    promise = promise.then(function () {
        return promiseWithParameters(call1, [1, 2])
    }).then(onSuccess);
    promise = promise.then(call2).then(onSuccess);
    promise = promise.then(function () {
        return promiseWithParameters(call3, [1, 2])
    }).then(onSuccess);
    promise = promise.then(call4);

    promise.done(function () {
        writeOutout("Done");
    });
    
    promise.done(function(){
       writeOutout('Done 2'); 
    });

    def.resolve();
});

function call1(parameters) {
    var def = $.Deferred();

    window.setTimeout(function () {
        writeOutout("Runing after 1 second");
        def.resolve();
    }, 1000);

    return def;
}

function call2() {
    var def = $.Deferred();

    window.setTimeout(function () {
        writeOutout("Runing after 2 seconds");
        def.resolve();
    }, 1000);

    return def;
}

function call3() {
    writeOutout("Test no deferred");
}

function call4() {
    var def = $.Deferred();

    window.setTimeout(function () {
        writeOutout("Runing after 4 seconds");
        def.resolve();
    }, 1000);

    return def;
}

function promiseWithParameters(fn, parameters) {
    var def = $.Deferred();
    var result = fn();
    jQuery.when(result).then(function () {
        def.resolve();
    });

    return def;
}

function onSuccess() {
    writeOutout("");
}

function writeOutout(text) {
    document.getElementById("output").innerHTML += text + "<br />";
}