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 = [];
var semaforo = true; // Aberto
// 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'];
executionOrder = executionOrder.concat(newOrder);
callback();
}, 4000);
setInterval(function () {
var newOrder = ['NOVO', 'NOVO', 'APAGA', 'NOVO', 'APAGA'];
executionOrder = executionOrder.concat(newOrder);
callback();
}, 4000);
function execute(req) {
if (req == 'NOVO') {
semaforo = false; // Fechado
db.sequences.add({
of: '0'
}).then(function () {
semaforo = true;
console.log('ADD 1');
callback();
});
} else if (req == 'APAGA') {
semaforo = false; // Fechado
db.sequences.where("of").equalsIgnoreCase('0').each(function (seq) {
db.sequences.delete(seq.id);
}).then(function () {
semaforo = true; // Fechado
console.log('DEL ALL');
callback();
});
}
};
function callback() {
while (semaforo && executionOrder.length) {
var next = executionOrder.shift();
...