Tuesday, July 17, 2018

MongoError: Topology was destroyed

Разбирался тут 2 дня почему не получается выполнить 2 асинхронных запроса в mongoDB.
Грешил на функции обратного вызова, потом на промеси.Ну не может такого быть!
Собственно есть коллекция:
const collection = db.collection('some');
Выполняю 2 запроса в нее. если выполнять параллельно - все гут, вызываю из
первой функции колбэк, вылетает ошибка:
MongoError: Topology was destroyed

Думаю, может колбэки устарели, переделал в промиси, та же песня. Случайно наткнулся на
размышления одного человека. Он задался вопросом, а когда закрывается соединение
в базу? меня осенила идея, а действительно - я закрываю соединение только когда
код полностью выполнится. И это оказалось ошибкой.
Выполняя первое промиси и не дожидаясь второго, который стартует сразу
после успешного выполнения первого, закрывается соединение с БД. 0_0

CountCollectionDocuments(collection).then(function(count) {
getSomeData(collection,data).then(function(res){
callback(res, count, null)
client.close();
}).catch(function(error){
callback(error)
client.close();
})
})
.catch(function(error){
callback(error)
client.close();
});

Вот с таким выполнением не нарушается структура БД и не закрываются соединения.

Успехов!

No comments:

Post a Comment