Node.js MongoDB:Collection.Find()是否支持承诺
我试图改造一个旧的Nodejs web服务,用链接承诺替换回调函数。 在查询mongodb时,我们使用下面的语法遍历结果集Node.js MongoDB:Collection.Find()是否支持承诺,node.js,mongodb,Node.js,Mongodb,我试图改造一个旧的Nodejs web服务,用链接承诺替换回调函数。 在查询mongodb时,我们使用下面的语法遍历结果集 collection.find(filter).toArray(function(err, items) { if (err) { throw(err); } else { console.log(items); } 如果我试图用替换.toArray
collection.find(filter).toArray(function(err, items) {
if (err) {
throw(err);
} else {
console.log(items);
}
如果我试图用替换.toArray()
部分,那么()
我会得到以下错误“col.find(…)。then不是函数”
如果我将.find()
替换为.findOne()。然后()
感谢您的帮助。find
返回一个游标
,但游标的toArray
方法返回一个承诺。因此,您可以:
collection.find(filter).toArray().then(...)
我猜你在用猫鼬
find()只是一个查询。要使其执行并返回承诺,需要对其调用.exec()
mongoose文档为您提供了有关如何将mongoose与回调或承诺一起使用的更多详细信息:您可以执行collection.find(,function(err,arrayOfData){})
或使用require('util')进行promisify。promisifyfunction@mast3rd3mon我想使用像承诺一样有效的承诺人,它只在查询完成后进入函数finished@Zorgatone我将尝试对require('util')进行进一步的研究。promisify thank youOP应该指定使用的是哪个软件包,但我相信这是官方的mongo DriverFuny,我使用mongoose这么长时间了,我没有注意到mongodb自己做的。看起来它确实在更新版本的nodejs mongodb驱动程序api中回报了承诺,但在早些时候没有versions@Zorgatone几年来,它一直支持承诺;甚至回到2.x版本。
collection.find(filter).exec()
.then(items => console.log(items))
.catch(err => { // handle error })