Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

302
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!