Diese Spielwiese kriegt in der (nahen Zukunft)!? ein Titel

und ein Untertitel

und vielleicht sogar auch ein Unteruntertitel verpasst

im unteren Codesnippets handelt es sich um…

const delay = 2000;

//unlesbare Schachtelung
setTimeout(() => {
  console.log('Level 1 reached...');
  setTimeout(() => {
    console.log('Level 2 reached...');
    setTimeout(() => {
      console.log('Level 3 reached...');
    }, delay);
  }, delay);
}, delay);

lev1(lev2);

function lev1(callback){
  setTimeout(() => {
    console.log('Level 1 reached from func lev1');
    callback(lev3);
  }, delay);
}

function lev2(callback){
  setTimeout(() => {
    console.log('Level 2 reached from func lev2');
    callback();
  }, delay);
}

function lev3(){
  setTimeout(() => {
    console.log('Level 3 reached from func lev3');
  }, delay);
}

eine bessere alternative mit promise

const delay = 1000;
const offset = 10;

function f(param1, param2) {
  
    // resolve function 'resf' randomly simulating success 
    setTimeout(resf, Math.floor(Math.random() * offset ) + delay - offset/2);
  
    // reject function 'rejf' randomly simulating issue occured
    setTimeout(rejf, delay);

    
    function resf() {
        param1({
            id:0,
            name:'hatim',
            accounts: {
                github:true,
                bitbucket:false,
                gitlab:true
            },
            ps: [
                'js',
                'ts',
                'py'
            ]
        });
    }

    function rejf() {
        param2(new Error('to be fixed...'));
    }
}


(function() {
    setInterval(() => {
        let p1 = new Promise(f);

        p1
        .then((ret) => {
            console.log('connection to DB established...');
            console.log('Promise resolved with', ret);
        })
        .catch((err) => {
            console.log('connection to DB failed...');
            console.log('Error', err);
        });

        setTimeout(() => {
            console.clear();
        }, 4000); //Time to update... could be outsourced in a const
    
  }, 4000);
})();