在MongoDB中使用本地ES6承诺

我知道Mongo的Node驱动程序可以使用外部库进行promisified 。 我很好奇,看看ES6承诺可以用于MongoClient.connect ,所以我尝试了这个(使用Babel 5.8.23 transpile):

 import MongoClient from 'mongodb'; function DbConnection({ host = 'localhost', port = 27017, database = 'foo' }) { return new Promise((resolve, reject) => { MongoClient.connect(`mongodb://${host}:${port}/${database}`, (err, db) => { err ? reject(err) : resolve(db); }); }); } DbConnection({}).then( db => { let cursor = db.collection('bar').find(); console.log(cursor.count()); }, err => { console.log(err); } ); 

输出是{Promise <pending>} 。 任何与游标有关的事情似乎都会产生类似的结果。 有没有办法来解决这个问题,还是我完全错误地吠叫了错误的树?

编辑:节点版本4.1.0。

没有什么可以解决的,这是预期的行为。 cursor.count()返回一个promise,如果你想要的值,你需要使用.then ,例如

 DbConnection({}).then( db => { let cursor = db.collection('bar').find(); return cursor.count(); } }).then( count => { console.log(count); }, err => { console.log(err); } ); 

或简化

 DbConnection({}).then(db => db.collection('bar').find().count()).then( count => console.log(count), err => console.log(err) ); 

loganfsmyth响应的另一个语法(顺便说一下,谢谢)

 cursor.count().then(function(cursor_count){ if(cursor_count){ // use cursor }else{ // no results } }