将文件上传到Firebase Storage(Web)后如何执行功能?

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

我想在文件上传完成后执行一些代码。我遇到的问题是,我用来上传文件的Promise.all()方法的承诺是异步返回的。在获取downloadURL数组中最后一个文件的files信息后,我尝试运行一些代码,但是执行的时间不一致。

这是我正在尝试的内容:

   let lastFileName = files[files.length - 1].name;
      Promise.all(
        files.map(item => {
          const storageRef = firebase
            .storage()
            .ref()
            .child(`test/${item.name}`)
            .put(item);

          return storageRef.on(
            firebase.storage.TaskEvent.STATE_CHANGED,
            snapshot => {...},
            error => {...},
            () => {
              storageRef.snapshot.ref
                .getDownloadURL()
                .then(downloadURL => {
                 if (lastFileName === item.name) {
                    someFunc();
                    }
                });
            }
          );
        })
      ).then(() => alert("firing asynchronously"));

.then(() => alert("firing asynchronously"));代码在提交文件后立即触发

javascript firebase promise firebase-storage
1个回答
0
投票

您所说的storageRef实际上是UploadTask instance。并且UploadTask不返回承诺,因此UploadTask.on(返回的内容与您期望的有所不同。它返回一个可用于删除侦听器的自定义函数,该函数立即满足UploadTask.on(约定。

我认为您要做的是返回一个承诺,该承诺将解析为下载URL,您可以使用类似的方法进行:

return storageRef.on(
© www.soinside.com 2019 - 2024. All rights reserved.