首页 > 解决方案 > 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基本上无法使用.

请告诉我我错了吗?

标签: javascriptnode.jssqlite

解决方案


您可以在 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");

推荐阅读