bwbr / people

https://bwbr.github.io/people
GNU General Public License v3.0
0 stars 0 forks source link

Utilizar indexeddb ou web sql para guardar os dados da aplicação #42

Open bwbrbot opened 3 years ago

bwbrbot commented 3 years ago

isso é necessário porque o localstore é um armazenamento de cache e não permite consultas

josimarsts commented 3 years ago

Bom dia! Iniciando os trabalhos de hoje com um probleminha...

Para a condição de guardar os dados estou utilizando o web sql, no cadastramento OK, entretanto para o retorno de dados e listagem encontro a seguinte questão.

`list(table: string): any{ const db: Database = window.openDatabase('people', '1.0', 'bwbr', 2 1024 1024);
let items: Atividade [] = [];

    db.transaction(function (tx) { 
        tx.executeSql(`SELECT * FROM ${table}`, 
        [], 
        function (tx, results) { 
            var len = results.rows.length, i; 
            for (i = 0; i < len; i++) { 
                items.push(results.rows.item(i));
            } 
        }, null); 
    }); 
    return items;
}`

No retorno de items

[ ] 0: {id: 1, titulo: "HTML/CSS", descricao: "Introdução ao curso.", idCard: "cardToDo"} 1: {id: 2, titulo: "HTML/CSS", descricao: "Introdução.", idCard: "cardToDo"} 2: {id: 3, titulo: "HTML/CSS", descricao: "Estrutura HTML", idCard: "cardToDo"}length: 3proto: Array(0)

Já tentei, mapear, já tentei forEach e for normal, entretando o tamanho da array me retorna '0'. Alguma sujestão?

josimarsts commented 3 years ago

Bom dia! Iniciando os trabalhos de hoje com um probleminha...

Para a condição de guardar os dados estou utilizando o web sql, no cadastramento OK, entretanto para o retorno de dados e listagem encontro a seguinte questão.

`list(table: string): any{ const db: Database = window.openDatabase('people', '1.0', 'bwbr', 2 1024 1024); let items: Atividade [] = [];

    db.transaction(function (tx) { 
        tx.executeSql(`SELECT * FROM ${table}`, 
        [], 
        function (tx, results) { 
            var len = results.rows.length, i; 
            for (i = 0; i < len; i++) { 
                items.push(results.rows.item(i));
            } 
        }, null); 
    }); 
    return items;
}`

No retorno de items

[ ] 0: {id: 1, titulo: "HTML/CSS", descricao: "Introdução ao curso.", idCard: "cardToDo"} 1: {id: 2, titulo: "HTML/CSS", descricao: "Introdução.", idCard: "cardToDo"} 2: {id: 3, titulo: "HTML/CSS", descricao: "Estrutura HTML", idCard: "cardToDo"}length: 3proto: Array(0)

Já tentei, mapear, já tentei forEach e for normal, entretando o tamanho da array me retorna '0'. Alguma sujestão?

RESOLVIDO (Optei por fazer em outro método que funcionou)

bwbrbot commented 3 years ago

okay, pode descrever ou colar o link do commit ? Assim compartilhamos comnhecimento. A outra solução é fazer o método retornar uma Promise, que é algo que em algum momento vai ser computado.

list(table: string): Promise<Array<Atividade>> {
    return new Promise((resolve, reject) => {
             const db: Database = window.openDatabase('people', '1.0', 'bwbr', 2 * 1024 * 1024);
             let items: Atividade [] = [];

    db.transaction(function (tx) { 
        tx.executeSql(`SELECT * FROM ${table}`, 
        [], 
        function (tx, results) { 
            var len = results.rows.length, i; 
            for (i = 0; i < len; i++) { 
                items.push(results.rows.item(i));
            }
            resolve(items);
        }, null); 
    }); 
    });
}

alguém também já passou por isso https://gist.github.com/konsumer/414aba5e0acacd2a0dd9