Promise.all不能正常工作-Firebase

问题描述 投票:0回答:1

我需要仅在Promise.all完成后才执行promise.then(),但是首先应在解决promise的那一组之后执行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));
      });
    }
  };
javascript firebase-realtime-database firebase-storage
1个回答
0
投票

您没有从.map返回任何内容,因此您正在创建一个undefined数组,而不是一个promise数组。更改为:

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));
  })
);
© www.soinside.com 2019 - 2024. All rights reserved.