【问题标题】:node.js sqlite3 run something after all db.each async callbacks finishnode.js sqlite3 在所有 db.each 异步回调完成后运行一些东西
【发布时间】:2021-08-05 11:45:41
【问题描述】:

我可以在 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,因为这会将所有内容加载到内存中。也许我可以用 promises 和 Promise.all 做点什么?

【问题讨论】:

    标签: node.js sqlite asynchronous promise


    【解决方案1】:

    也许作为替代方案,我建议改用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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多