#javascript #promise #bluebird
#javascript #обещание #bluebird
Вопрос:
Следующий код работает (пользовательский объект записывается в консоль), однако процесс не завершается. Я считаю, что одно из обещаний не должно быть разрешено?
var Promise = require("bluebird");
var mongodb = require('mongodb');
Promise.promisifyAll(mongodb);
mongodb.MongoClient.connectAsync("mongodb://localhost/test")
.then(function(db){
var users = db.collection('users');
return users.findOneAsync({userName: "someuser"});
})
.then(function (result) {
console.log(result);
})
.catch(function(e){
//handle error
});
Что не так с этим кодом?
Комментарии:
1. Если вы что-то печатаете, то обещания определенно разрешаются. Есть ли причина не добавлять .finally(function() {process.exit(0);}) для завершения работы скрипта, когда вы закончите?
2. Закрытие соединения, как предложено в ответе ниже, приводит к чистому завершению кода.
Ответ №1:
MongoDB создает постоянное соединение, которое вы должны использовать в течение всего жизненного цикла вашего приложения.
Когда вы закончите с этим — закройте его. То есть — вызов db.close()
Если вы хотите написать более разумный код, используйте Promise.using
и disposer
для создания более разумного connectAsync
кода, который выполняет управление ресурсами за вас.