2017-10-18 14 views
0

誰かがノード-sqliteでPromisesを使って良い方法を見せてくれますか?例えばノード-sqliteからデータを取得して約束を使用

私はコールバック地獄 を避け、空の変数

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) 

誰かが助けることはでき

を取得するために、このようなコードを書き換えるしようとしていますか? ノードsqliteのみ、ORMまたはsqliteベースのlibは使用しないでください。

答えて

0

あなたのコードをtranspileことができたり、ノード7.6+を使用している場合、あなたは非同期を使用することができます場合は/ために `db` instanseを返すdb.all`原因を`動作しません

(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

ハズレを待ちます'db.all(query).all(query).run(query)のような連鎖......'おそらく別の提案? – Dmitry

+0

私はnode-sqliteについてよく知らない。オペレーションが約束を返す限り、いつでもそのオブジェクトを待つことができます。 'medics = await db.all(...)'としましょう。それから、 'await medics.all(...)'を実行することができます。 –

関連する問題