#javascript #html #firebase #asynchronous #promise
#javascript #HTML #firebase #асинхронный #обещание
Вопрос:
У меня есть этот код JavaScript:
members.reduce((chain, el) => {
return chain
.then(() => db.collection("users").doc(el).collection("user_data").doc("u").get())
.then(doc => {
const data = doc.data();
// do some stuff
return table_number;
})
.then(table_num => {
return db.collection("users").doc(el).collection("grades").doc("g").collection(education_part).get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
const data = doc.data();
//DO SOME STUFF AGAIN AFTER FIRST TASK FINISHED
});
})
})
}, Promise.resolve());
Как я могу запустить, когда все эти задачи будут завершены? Заранее спасибо
~ филип
Редактировать
Вот // СДЕЛАЙТЕ НЕКОТОРЫЕ ВЕЩИ СНОВА ПОСЛЕ ЗАВЕРШЕНИЯ ПЕРВОЙ ЗАДАЧИ. Это синхронно, но это решение }, Promise.resolve()).then(console.log("finished"));
даже не работает.
var filteredMDl = 0, filteredKLU = 0, local_averagePoints = 0;
addToTable("grade_table" table_num, doc.id, filteredMDl, filteredKLU, local_averagePoints);
//Adds data to an HTML table
Комментарии:
1.
members.reduce((chain, el) => { ....... }, Promise.resolve()).then( fire away!!! )
2. Происходит ли что-нибудь асинхронное
DO SOME STUFF AGAIN...
? Если это так, вам нужно вернуть обещание в этом конкретномthen
обратном вызове.3. @trincot Как это сделать?
4. Использование
Promise.all
, но код вашего вопроса не показывает, какие асинхронные вещи вы там делаете, поэтому трудно дать ответ.5. @trincot Не могли бы вы взглянуть на мою правку? 🙂