0
我正試圖找到一種方法來迭代Firebase數據庫中大量數據集合中的所有對象。我是否正確地分析了一個巨大的Firebase集合?
我最好的嘗試如下,但我發現很奇怪的幾個原因:
startAt()
值總是包容。因此,在獲取100個元素後,我必須使用我最後一次提取的密鑰作爲參數startAt
,這導致最後一個項目被再次提取DataSnapshot
的forEach
方法不允許使用索引計數進行回調它將基於JS的標準,所以我不得不創建一個手動指標 - 不知道它會在任何情況下工作,因爲我不知道是否forEach
作品完美地同步
這裏是我的代碼,如果假定我的收藏位於users
。
const mapAllTripsPaginated = function (database, childSnapshotCallback, start = '', limit = 100, totalNb = 0) {
return database.ref('/users').orderByKey().startAt(start).limitToFirst(limit).once('value').then((snapshot) => {
let childrenPromises = []
let lastChildKey = null
let idx = 0
snapshot.forEach((childSnapshot) => {
lastChildKey = childSnapshot.key
if (start !== '' && idx === 0) {
// console.log(`Skipping ${childSnapshot.key} as 1st element of page`)
} else {
childrenPromises.push(childSnapshotCallback(childSnapshot))
}
idx = idx + 1
})
return Promise.all(childrenPromises)
.then((result) => {
let newTotal = totalNb + result.length
if (snapshot.numChildren() === limit) {
console.log(`Paginating from ${lastChildKey}`)
return mapAllTripsPaginated(database, childSnapshotCallback, start = lastChildKey, limit = limit, totalNb = newTotal)
} else {
// Done paginating
return newTotal
}
})
})
}
,我怎麼能做出這樣的方法更優雅的任何想法?