javascript - sqlite3,每个,和与节点异步
问题描述
所以 - 我们大量使用 sqlite3,通常我使用all来选择 - 但我们有一个情况,我们有一个大数据集(数千万行),我想逐行处理它......并遇到了看起来像一个无法解决的问题。
如果我做
console.log("before");
database.each( "select * from blah",
(error, row) => {console.log("during");output.write(row.something);} );
console.log("after");
我看到“之前”、“之后”、“期间”这些词。现在这个问题 - 我需要关闭流 -在最后一条记录出来之后。似乎没有办法确定这一点,或者在发生这种情况时得到回调。
我错过了什么吗?几乎每次有人迭代基本上是光标的东西时,他们都需要一种方法来知道他们何时完成 - 据我所知 - 当前的 javascript 实现完全不可能,这使得.each基本上无法使用.
请告诉我我错了吗?
解决方案
您可以在 db.each 函数中使用完成回调,例如 -
console.log("before");
database.each( "select * from blah", (error, row) => {
console.log("during");
output.write(row.something);
}, (err, count) {
// close your stream here or use a promise and resolve it from here
stream.close();
}));
console.log("after");
推荐阅读
- php - 我正在处理应用程序,我收到了这个 notify() 错误
- php - 仅显示我的输入数组的一条验证消息
- java - 编译简单自定义标签类时出错
- python - Scrapy:重复请求 440 状态码
- mysql - 在 MySQL 触发器中声明一个变量;引用相同的行类型
- java - 用 Java 绘画
- drag-and-drop - PhpStorm 从资源管理器拖放文件
- php - 将 API 密钥放在 Google Cloud Vision for PHP 中的位置
- report - Acumatica:作为子报表调用时,表格报表生成意外行
- php - 如何使用vue-resource和proxy.php解决跨域问题