2017-10-18 4 views
0

Quelqu'un peut-il montrer un bon moyen en utilisant Promises avec node-sqlite?obtenir des données de node-sqlite en utilisant des promesses

Par exemple, je suis en train de réécrire ce code pour éviter rappel-enfer et obtenir des variables vides

tableRows = [] 
columns = []  

db.all(`... query`, params, (err, medics) => { 
    medics.forEach((medic) => { 
     db.all(`some other query`, {$id: medic.id}, (err, amounts) => { 
       tableRows.push(amounts) 
      }) 
     } 
    }).all(`another query`, (err, result) => { 
     columns = result 
    }) 

console.log(tableRows, columns) 

Quelqu'un peut-il aider? Seul noeud-sqlite s'il vous plaît, pas de bibliothèques ORM ou sqlite.

Répondre

0

Si vous pouvez transpile votre code ou si vous utilisez nœud 7.6+, vous pouvez utiliser async/attendre

(async function() { 

    tableRows = [] 
    columns = []  

    try { 

     const medics = await db.all(`... query`, params); 
     medics.forEach((medic) => { 
      const amounts = await db.all(`some other query`, {$id: medic.id}); 
      tableRows.push(amounts); 
     }); 

     const result = db.all(`another query`); 
     columns = result; 
     console.log(tableRows, columns); 
    } 

    catch(err) { 
     console.log(err); 
    } 
})(); 
+0

Nope, qui ne fonctionne pas la cause '' db.all' retourne db' instanse pour chaînage comme 'db.all (requête) .all (requête) .run (requête) ......' Peut-être une autre suggestion? – Dmitry

+0

Je ne suis pas très familier avec node-sqlite. Tant que l'opération renvoie une promesse, vous pouvez toujours attendre sur cet objet. Disons que 'medics = wait db.all (...)'. Ensuite, vous pouvez faire 'wait medics.all (...)' –