Мой код передает данные из коллекции mongo и вставляет их в другую БД после выполнения с ней некоторого количества операций.
Кажется, я не могу найти способ дождаться, пока все данные будут обработаны, прежде чем закрывать соединения с БД. Обработка данных завершается через несколько секунд после «закрытия» потока. Хочу дождаться ВСЕХ данных операции, которые необходимо завершить перед закрытием соединений с БД. Как мне это сделать?
PS: Я вижу, что все данные оперированы. Это хорошо работает. Но я хочу закрыть соединения с БД. Мне нужно дождаться завершения всех операций, прежде чем делать это!
var count = 0; // Counter for number of mongo docs that has been inserted in new_db
mongo_db.collection(config.collection, function (err, coll) {
coll.find(config.mongo_query).count(function (e, coll_docs_count) {
var stream = coll.find(config.mongo_query).stream();
stream.on('close', function () {
if (count === coll_docs_count) {
// This NEVER executes since the data is finished
//being operated and inserted in the NEW DB a few seconds after
//this moment.
mongo_client.close();
cb_bucket.disconnect();
}
});
stream.on('data', function (doc) {
... // Do some operations on it
new_db.insert(doc, function (blah blah) {
count++;
})
})
})
})
Нил, использую nodejs версии 8 или 9, так что все в порядке. Я вставляю эти данные в ведро на диване. SDK для Couchbase nodejs не поддерживает массовую запись. Я рассмотрю возможность использования await - если вы это предлагаете.





Есть много способов, и это очень широко обсуждается, так что вы, вероятно, могли бы подумать немного усерднее. Вам нужно быть более конкретным в том, что вы хотите делать для каждого события данных, потому что у вас есть асинхронный вызов, который вам также нужно ждать, и похоже, что вы действительно хотите массовую запись в любом случае. Какую версию NodeJS вы используете? Пожалуйста, не говорите меньше 4, потому что в этом случае вам следует выполнить обновление до того, как вы столкнетесь с реальной проблемой и не сможете обратиться за официальной поддержкой.