[英]Trying to understand how to use Promise in js
我正在为mongoDB使用本机驱动程序。 在数据库中,我大约有7个集合,我想创建一个变量,该变量存储每个集合中的条目数减去最后一个集合。 之后,我想创建另一个变量,该变量存储最后一个集合的条目,然后我想通过res.render()命令传递这些变量并将其显示在网页上。
我在这里遇到的问题是,我习惯于同步执行函数,在这种情况下,函数会直接弹出窗口。
如果一切都同步执行,下面的代码就是我的想法。
var count = 0;
db.listCollections().toArray(function(err,collection){
for(i = 1; i < collection.length;i++){
db.collection(collection[i].name).count(function(err,value){
count = count + value;
})
}
var count2 = db.collection(collection[i].name).count(function(err,value){
return value;
})
res.render('index.html',{data1: count, data2: count2})
})
显然,这并不是我不想做的,所以我试着兑现诺言,但最终变得更加困惑。
您可以使用Promises做类似的事情:
获取集合名称,对其进行迭代,然后返回计数或条目(如果它是最后一个集合)。 然后汇总各个计数并将所有内容发送给客户端。
db.listCollections().toArray()
.then(collections => {
let len = collections.length - 1
return Promise.all(collections.map(({name}, i) => {
let curr = db.collection(name)
return i < len ? curr.count() : curr.find().toArray()
}
))
}
)
.then(res => {
let last = res.pop(),
count = res.reduce((p, c) => p + c)
res.render('index.html', {count, last})
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.