Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

311
Visualizações
Dexie.js elimina un elemento con id que no funciona

Hola, este es mi ejemplo de código js de proyecto simple

 const deleteOneNote = (id) => { const db = openNoteDb(); db.notes.where('id').equals(id).delete(); } $(document).on("click", ".remove_note", function () { const id = $(this).parent().parent().attr("id"); const db = openNoteDb(); db.notes.where('id').above(-1).modify(result => { if (result.id == id) { deleteOneNote(result.id); window.location.reload(true) } }) })

Pero mi función de eliminación no funciona. No entiendo. Por favor, ayúdame.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

En primer lugar, su función deleteOneNote() debe devolver la promesa de db.transaction() para que pueda esperar a que se complete la eliminación. Alternativamente, haga que la función sea asíncrona y espere la promesa devuelta por db.transaction(). Independientemente de lo que elija, la persona que llama a su función también debe esperar su función antes de probar si la eliminación fue exitosa o no.

Luego, también veo un problema común en el código, que es que la instancia de Dexie se crea bajo demanda, lo que provocaría una pérdida de memoria a menos que la cierre cuando termine. En su lugar, declare db en el nivel superior para que viva durante toda la vida útil de su aplicación y permita que las funciones usen la misma instancia de db en todas partes.

Un tercer error común (que podría no ser esta causa) es que las personas proporcionen una cadena cuando la clave se almacenó como un número, o viceversa. Asegúrese de que la identificación proporcionada a su función sea del mismo tipo que en el objeto que desea eliminar.

 // Declare one single Dexie instance in your entire application // and use it from all functions. const db = new Dexie("NotesDB"); // If you use modules, keep this code in a module and // add an 'export' before 'const db = new Dexie("NotesDB"); db.version(1).stores({ notes: ` id, time, note, noteBackColor, noteTextColor, projectType, alarm`, }); // Let you functions use the singleton Dexie instance: const deleteOneNote = (id) => { return db.transaction('rw', db.notes, function () { // Note: Doing this in a transaction is over-kill, but ok. return db.notes.delete(id); }).catch((err) => { console.log(err); throw err; // Also, you probably want to rethrow the error... }); }

Ahora, estas son recomendaciones de código de la sección de mejores prácticas de Dexie y no necesariamente la razón por la cual su código no puede eliminar un elemento.

Una cosa más interesante es:

  1. ¿Cuál es el valor de la propiedad "id" en su base de datos del objeto que desea eliminar? Supongo que su objeto se parece a {id: "x", time: "y", ...} .

  2. ¿Qué argumento le pasas a tu función? Si el objeto que está eliminando se parece al descrito en la viñeta anterior, el valor del argumento id debe ser exactamente la cadena "x", no el objeto ni una matriz ni ningún otro tipo, una cadena con el valor exacto "x".

Una prueba de trabajo para este código sería:

 const foo = {id: "x", time: "y"}; db.notes.put(foo).then(async () => { if (await db.notes.get("x")) { console.log("My object is there!"); } else { console.log("My object is not there!"); } console.log("Now deleting it..."); await deleteOneNote("x"); if (await db.notes.get("x")) { console.log("My object is there!"); } else { console.log("My object is not there!"); } }).catch(console.error);

El resultado de ejecutar esta prueba debe ser:

 My object is there! Now deleting it... My object is not there!
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda