【发布时间】:2020-03-03 03:07:03
【问题描述】:
我正在尝试运行一个获取位置集合的查询。然后它需要根据临时集合检查每个位置,以确保它不存在。如果它不存在,它将进入数组。接下来它循环遍历数组并随机抓取三个。
这是我的代码:
let locations = []
let getLocations = db.collection('locations')
.where('area', '==', 'central')
.get().then(snapshot => {
snapshot.forEach(doc => {
let loc = doc.data()
loc.id = doc.id
console.log('1')
let locationsplayedRef = db.collection('locationsplayed')
locationsplayedRef = locationsplayedRef.where('location_id', '==', loc.id)
locationsplayedRef.get().then(snapshot => {
// make sure the location is not already in the db
if (snapshot.empty) {
// only grab activated locations
if(!loc.deactivated)
locations.push(loc)
}
console.log('2 ', locations)
})
})
}).then(() => {
for (let i = locations.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[locations[i], locations[j]] = [locations[j], locations[i]];
}
let third = locations[0];
let [first, second] = locations.filter(l => !l.restaurant).slice(1);
let selectedLocations = [first, second, third];
console.log('3 ', selectedLocations)
})
当前代码的问题是控制台日志看起来像这样 1 3 2 我需要 1 2 3。我知道我需要使用 promise 或 await,但我还是新手,不知道如何使用实施它。
有人可以告诉我如何使用 Promise 或 Await 以便我的代码以正确的顺序运行吗?
【问题讨论】:
标签: javascript firebase promise async-await