JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://rawgit.com/dfahlander/Dexie.js/master/src/Dexie.js"></script>

JavaScript

// CONFIGURACOES DA DB //
var db = new Dexie('teste');

db.version(1).stores({
    sequences: '++id,of'
});
db.open().
catch ();
// CONFIGURACOES DA DB //

var executionOrder = [];

// isso foi o exemplo mais pratico que encontrei.. é um exemplo em que o servidor envia 4 mensagens (ou mais) seguidas e ao "mesmo tempo", ele nao checa se há algo sendo executado, no caso se houvesse ele deveria esperar até o fim para enviar a nova requisiçao

// NOVO: adiciona um
// APAGA: deleta todos
// A INTENÇAO AQUI E QUE: ELE NAO VA PARA PROXIMA FUNCAO SEM TER EXECUTADO TUDO QUE ´E NECESSARIO.

// Neste caso ele deve: CRIAR UM NOVO
//                      CRIAR UM NOVO
//                      APAGAR OS DOIS CRIADOS ACIMA (TUDO)
//                      CRIAR UM NOVO
//                      APAGAR O ULTIMO CRIADO (TUDO)
// tudo isso 2 vezes, porém em ordem  sem agrupar nem alterar a ordem de execuçao

setInterval(function () {
    var newOrder = ['NOVO', 'NOVO', 'APAGA', 'NOVO', 'APAGA'].reverse();
    executionOrder = executionOrder.concat(newOrder);
    callback();
}, 4000);
setInterval(function () {
    var newOrder = ['NOVO', 'NOVO', 'APAGA', 'NOVO', 'APAGA'].reverse();
    executionOrder = executionOrder.concat(newOrder);
    callback();
}, 4000);

function execute(req) {
     if (req == 'NOVO') {
        db.sequences.add({
            of: '0'
        });
        console.log('ADD 1');
        callback();
    } else if (req == 'APAGA') {
        db.sequences.where("of").equalsIgnoreCase('0').each(function (seq) {
            db.sequences.delete(seq.id);
        }).then(function () {
            console.log('DEL ALL');
            callback();
        });
    }
};

function callback() {
    if (executionOrder.length) {
        var next = executionOrder.pop();
        execute(next);
    }
}