首页 > 解决方案 > node.js sqlite3 在所有 db.each 异步回调完成后运行一些东西

问题描述

db.each 处理完每一行后,我可以运行一些东西吗?

var email = openEmailConnection();
db.each("SELECT * FROM mytable", async (err, row) => {
  var x = await makeNetworkApiCall();
  await email.sendMail({message: "your message: " + x});
  console.log("finished");
});
//somehow call closeEmailConnection() after all async callbacks have finished

我不想做 db.all 因为这会将所有内容加载到内存中。也许我可以用 Promise 和 Promise.all 做点什么?

标签: node.jssqliteasynchronouspromise

解决方案


也许作为替代方案,我建议better-sqlite3改用。在这里,您有一个iterate()函数允许您像这样处理 for 循环中的所有条目(来自他们的文档,稍作修改):

const email = openEmailConnection();

const stmt = db.prepare('SELECT * FROM mytable');
for (const entry of stmt.iterate()) {
  const x = await makeNetworkApiCall();
  await email.sendMail({message: "your message: " + x});
}

closeEmailConnection();

推荐阅读