2017-10-18 62 views
0

有人可以使用Promises和node-sqlite显示一些好方法吗?使用Promise从node-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) 

有人能帮忙吗? 只有node-sqlite请不要使用ORM或基于sqlite的库。

回答

0

如果你能transpile你的代码,或者如果你正在使用节点7.6+,你可以使用异步/等待

(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'返回'db' instanse为链接像'db.all(查询).all(查询).run(查询)......'也许另一个建议? – Dmitry

+0

我对node-sqlite不是很熟悉。只要操作返回承诺,您就可以随时等待该对象。假设'medics = await db.all(...)'。那么你可以'等待medics.all(...)' –