如何防止挂起的嵌套承诺?

时间:2014-06-21 04:11:03

标签: javascript promise 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 个答案:

答案 0 :(得分:0)

MongoDB创建了一个持久连接,您应该在应用程序的整个生命周期中使用该连接。

当你完成它 - 关闭它。那就是 - 致电db.close()

如果您想编写更合理的代码,请使用Promise.usingdisposer来制作更适合您的资源管理connectAsync