sqlite3, каждый, и асинхронный с узлом - PullRequest
0 голосов
/ 18 сентября 2018

так - мы интенсивно используем sqlite3, и обычно я выбираю all , но у нас есть ситуация, когда у нас большой набор данных (десятки миллионов строк), и я хотел обработать его построчно грести ... и столкнулся с чем-то вроде непреодолимой проблемы.

если я сделаю

console.log("before");
database.each( "select * from blah", 
    (error, row) => {console.log("during");output.write(row.something);} );
console.log("after");

Я вижу слова "до", "после", "во время". Теперь проблема с этим - мне нужно закрыть поток - после вышла последняя запись. Кажется, нет никакого способа определить эту точку или получить обратный вызов, когда это произойдет.

Я что-то упустил? Почти каждый раз, когда кто-то перебирает то, что в основном является курсором, ему нужен способ узнать, когда он закончил - и, насколько я могу судить, - это просто невозможно в текущей реализации javascript, которая делает . каждый по существу непригоден для использования.

Пожалуйста, скажите мне, что я не прав?

1 Ответ

0 голосов
/ 18 сентября 2018

Вы можете использовать обратный вызов завершения в функции 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...