Promise.all не работает должным образом - Firebase - PullRequest
0 голосов
/ 04 апреля 2020

Мне нужно, чтобы promises.then () выполнялся только после завершения Promise.all, однако firebase.database (), который должен выполняться только после разрешения набора обещаний, выполняется первым.

  const finalizarAlbum = async () => {
    setVisibleMod(false);
    if (nome && email && telefone) {
      const id = uuid();
      const promises = Promise.all(
        arrayPages.map((item, index) => {
          firebase
            .storage()
            .ref(id)
            .child(listaOrdemFotos[index])
            .putFile(item)
            .then((res) => {
              objetoPaginas.push({
                ordem: index,
                pagina: arrayPages[index],
                url: res.downloadURL,
              });

              setUnidade((unidade) => unidade + 1);
            })
            .catch((error) => setErro(erro));
        })
      );

      promises.then(() => {
        firebase
          .database()
          .ref('usuarios')
          .child(id)
          .set({
            nome,
            email,
            telefone,
            listaOrdemFotos: objetoPaginas,
          })
          .then(() => console.log('Enviado'))
          .catch((error) => setErro(erro));
      });
    }
  };

1 Ответ

1 голос
/ 04 апреля 2020

Вы ничего не возвращаете из .map, поэтому вы создаете массив undefined с, а не массив обещаний. Измените его на:

const promises = Promise.all(
  arrayPages.map((item, index) => {
    return firebase // <---------
      .storage()
      .ref(id)
      .child(listaOrdemFotos[index])
      .putFile(item)
      .then((res) => {
        objetoPaginas.push({
          ordem: index,
          pagina: arrayPages[index],
          url: res.downloadURL,
        });

        setUnidade((unidade) => unidade + 1);
      })
      .catch((error) => setErro(erro));
  })
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...