Я пытаюсь зациклить и получить разные документы из пожарного магазина. «Идентификаторы документов» предоставляются массивом «cart», как показано в приведенном ниже коде.
Логика программирования, которую я попробовал, выглядит следующим образом: цикл while на каждой итерации получает документ из firestore и в первом разделе «then» сохраняет только что полученные данные, а во втором «then» увеличивает «i». и выполняет следующий цикл цикла.
Проблема в том, что цикл не ожидает завершения запроса get. Это просто продолжает цикл и вылетает.
Дело в том, что даже если мне как-то удастся сделать правильную часть цикла. Как бы я управлял всем потоком выполнения программы, чтобы только после завершения части цикла выполнялся дополнительный код, поскольку приведенный ниже код использует массив cart, который обновляет часть цикла.
let i = 0
while (i < cart.length) {
let element = cart[i]
db.collection(`products`).doc(element.productID).get().then((doc1) => {
element.mrp = doc1.data().mrp
element.ourPrice = doc1.data().ourPrice
return console.log('added price details')
}).then(() => {
i++;
return console.log(i)
}).catch((error) => {
// Re-throwing the error as an HttpsError so that the client gets the error details.
throw new functions.https.HttpsError('unknown', error.message, error);
});
}
return db.collection(`Users`).doc(`${uid}`).update({
orderHistory: admin.firestore.FieldValue.arrayUnion({
cart,
status: 'Placed',
orderPlacedTimestamp: timestamp,
outForDeliveryTimestamp: '',
deliveredTimestamp: ''
})
}).then(() => {
console.log("Order Placed Successfully");
})