Tengo una matriz con objetos. Quiero importarlos a una base de datos sqlite3. Hago esto con un bucle forEach. Funciona bien. Pero me pregunto por qué los objetos no se importan en el orden en que los puse en la base de datos.
Esto es lo que hago
const comments = [ {post_id: 1, comment: "lorem ipsum comment 1", comment_author: "user 1"}, {post_id: 2, comment: "lorem ipsum comment 2", comment_author: "user 1"}, ] comments.forEach(c => { sql = `INSERT INTO comments(post_id, comment, comment_author) VALUES (?,?,?)` db.run(sql, [c.post_id, c.comment, c.comment_author], (err) => { if (err) { console.log(err.message)}; }); });Si ahora ejecuto una selección, obtengo el siguiente orden puro (eche un vistazo a post_id) :
[ {id: 1, post_id: 2, comment: "lorem ipsum comment 2", comment_author: "user 1"}, {id: 2, post_id: 1, comment: "lorem ipsum comment 1", comment_author: "user 1"} ]Pregunta ¿Por qué sucede esto? Y qué puedo hacer para cambiar el comportamiento.
Resultado Esperado:
[ {id: 1, post_id: 1, comment: "lorem ipsum comment 1", comment_author: "user 1"}, {id: 2, post_id: 2, comment: "lorem ipsum comment 2", comment_author: "user 1"} ]Tenga en cuenta que supongo que tiene algo que ver con la sincronización de javascript.
Tiene razón con su suposición: supongo I Guess it has something to do with the async of javascript. !
let placeholders = comments.map((c) => '(?)').join(','); let sql = 'INSERT INTO comments(post_id, comment, comment_author) VALUES ' + placeholders; // output the INSERT statement console.log(sql); db.run(sql, [comments], (err, results, fields) => { if (err) { return console.error(err.message); } // get inserted rows console.log('Row inserted:' + results.affectedRows); }); // close the database connection db.close();