[英]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.