JSFiddle - React, Tailwind, and code Playground

by jhoguet

JavaScript

// calling save should start the ajax call


var body = $('body');
function print(message){
    body.append('<p>' + message + '</p>');   
}
function sleep(dfr, item){
    setTimeout(function(){
        print('awake');
        dfr.resolveWith(null, [item]);
    }, 1000);
}

function deferred(){
    var _deferredGetter;
    var _postDeferred = $.Deferred();
    var fn = function(item){
        _deferredGetter(item)
        .then(function(message){
            alert(message);
            _postDeferred.resolveWith(null, [message]);
        });
    };
    fn.by = function(deferredGetter){
       _deferredGetter = deferredGetter;
    };
    fn.promise = function(){
          return   _postDeferred.promise();
    };
    return fn;
};

var save  = deferred();
save.promise()
.then(function(message){
    return message + ' > post save'  ;
})
.done(print);

function daoSave (item){
    var mockAjax = $.Deferred();
    sleep(mockAjax, item);
    return mockAjax
    .then(function(message){
        return message + ' > ajax';    
    })
    .done(print);  
};

save.by(daoSave);
print('saving now');
save('save');