node.js - 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 做点什么?
解决方案
也许作为替代方案,我建议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();
推荐阅读
- r - 重复第一次调查遇到的年龄和性别输入以进行重复的患者调查
- javascript - 浏览器下载不同目录下的js文件
- javascript - 在带有按钮的循环中:仅在单击的按钮中切换类 on_click
- r - 替换重复列名称中的点
- android - 应用发布后Playstore没有刷新新版本
- python - 如何根据常用值将数据框中的列值添加到另一个数据框中?熊猫/蟒蛇
- dataframe - 如何在 DataFrames.jl(0.19 版)中拆分列值?
- node.js - 清除缓存后如何刷新所有现有网页 使用 express 或 node.js
- html - 移动视口中的网页呈现双倍宽度
- wpf - FindVisualChildren 可以定位 ListView 的 GridViewColumns 吗?如果没有,如何解决?