在 MongoDB 中使用原生 ES6 promises
Using native ES6 promises with MongoDB
我知道 Mongo 的节点驱动程序可以 promisified 使用外部库。我很想知道 ES6 promises 是否可以与 MongoClient.connect
一起使用,所以我尝试了这个(使用 Babel 5.8.23 进行转译):
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()
returns 一个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
}
}
我知道 Mongo 的节点驱动程序可以 promisified 使用外部库。我很想知道 ES6 promises 是否可以与 MongoClient.connect
一起使用,所以我尝试了这个(使用 Babel 5.8.23 进行转译):
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()
returns 一个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
}
}