2017-10-18 2 views
0

Kann jemand einen guten Weg zeigen mit Promises mit node-sqlite?Daten von node-sqlite mit Promises erhalten

Zum Beispiel Ich versuche, einen solchen Code neu zu schreiben Rückruf-Hölle und leere Variablen

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) 

Kann jemand helfen, zu vermeiden? Nur node-sqlite, keine ORM oder sqlite-basierte libs.

Antwort

0

Wenn Sie Ihren Code transpile können oder wenn Sie Knoten verwenden 7.6+, können Sie async/erwarten

(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

Nö, das nicht Ursache funktioniert '' db.all' kehrt db' instanse für Verkettung wie 'db.all (Abfrage) .all (Abfrage) .run (Abfrage) ......' Vielleicht ein anderer Vorschlag? – Dmitry

+0

Ich bin nicht sehr vertraut mit Node-SQLite. Solange die Operation eine Zusage zurückgibt, können Sie immer auf dieses Objekt warten. Sagen wir "medics = erwarten db.all (...)". Dann kannst du 'medics.all (...) warten ' –