Срабатывает, когда задача завершена с обещанием

#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 Не могли бы вы взглянуть на мою правку? 🙂