如何使用 Bluebird 为游标和/或集合的 toArray() Promisify Node 的 mongodb 模块?
Posted
技术标签:
【中文标题】如何使用 Bluebird 为游标和/或集合的 toArray() Promisify Node 的 mongodb 模块?【英文标题】:How can I Promisify Node's mongodb module for cursors and/or a collections' toArray() using Bluebird? 【发布时间】:2014-10-07 11:40:30 【问题描述】:相关包:
"dependencies":
"mongodb": "1.4.x",
"bluebird": "2.3.x"
我看过:
How can I promisify the MongoDB native javascript driver using bluebird? Bluebird Promisfy.each, with for-loops and if-statements? https://***.com/a/21733446/438992 Bluebird 的承诺文档 其他几个地方findAsync()
之后我被卡住了。
我更喜欢一个游标,但很少有太多东西可以调用toArray()
。
也有可能我做错了。
MongoClient.connectAsync('mongodb://127.0.0.1:27017/sr')
.then(function(_db)
db = _db;
return db.collectionAsync('posts');
)
.then(function(colPosts)
return colPosts.findAsync();
)
.then ( A MIRACLE OCCURS )
.catch(function(e)
console.log(e);
)
.finally(function()
if (db) db.close();
);
奇迹发生的地方我想遍历游标结果或数组化集合。我在弄清楚如何解决这个问题时遇到了问题。
【问题讨论】:
遍历它们,然后做什么?结果应该去哪里? @Bergi 现在主要是为了副作用。 签出***.com/questions/24870812/… 【参考方案1】:据我了解,.findAsync
返回一个游标的承诺。如果您想将数据拉入内存(如.toArray
),我认为您正在寻找的内容类似于:
MongoClient.connectAsync('mongodb://127.0.0.1:27017/sr')
.then(function(_db)
db = _db;
return db
.collection('posts')
.find()
.limit(limit)
.sort(sort)
.toArrayAsync();
)
.then(function(posts)
console.log('posts', posts);
)
.catch(function(e)
console.log(e);
);
【讨论】:
以上是关于如何使用 Bluebird 为游标和/或集合的 toArray() Promisify Node 的 mongodb 模块?的主要内容,如果未能解决你的问题,请参考以下文章
SqlServerSqlServer编程语言T-SQL的游标使用
如何使用 Bluebird 在构造函数构建的“类”上承诺导出的函数