2014-06-21 35 views
1

以下代碼有效(將用戶對象寫入控制檯),但該過程不會退出。我相信其中的一個承諾一定不能解決?如何防止掛起諾言掛?

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 
}); 

這段代碼有什麼問題?

+0

如果你正在打印某些東西,那麼承諾肯定會得到解決。是否有理由不添加.finally(function(){process.exit(0);})來完成腳本的終止? – Retsam

+0

按照以下答案中的建議關閉連接會導致代碼徹底終止。 – schmidlop

回答

0

MongoDB創建一個持久性連接,您應該在應用程序的整個生命週期中使用它。

當你完成它 - 關閉它。那就是 - 打電話db.close()

如果你想寫更理智的代碼,使用Promise.usingdisposer製作一個理智的connectAsync這確實資源管理爲您服務。