Я пытаюсь выполнить запрос, который захватывает коллекцию местоположений. Затем необходимо проверить каждое местоположение по временной коллекции, чтобы убедиться, что оно еще не существует. Если он не существует, он входит в массив. Затем он перебирает массив и случайным образом получает три.
Вот мой код:
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, чтобы мой код работал в правильном порядке?