Javascript 将文件上载到Firebase存储(Web)后如何执行功能?

Javascript 将文件上载到Firebase存储(Web)后如何执行功能?,javascript,firebase,promise,firebase-storage,Javascript,Firebase,Promise,Firebase Storage,我想在文件上传完成后执行一些代码。我遇到的问题是,我用来上传文件的promise.all()方法中的promise是异步返回的。在获取files数组中最后一个文件的downloadURL信息后,我尝试运行了一些代码,但执行时间不一致 以下是我正在尝试的: 让lastFileName=files[files.length-1].name; 我保证( files.map(项=>{ 常数storageRef=firebase .储存 .ref() .child(`test/${item.name}`)

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

以下是我正在尝试的:

让lastFileName=files[files.length-1].name;
我保证(
files.map(项=>{
常数storageRef=firebase
.储存
.ref()
.child(`test/${item.name}`)
.put(项目);
返回storageRef.on(
firebase.storage.TaskEvent.STATE_已更改,
快照=>{…},
错误=>{…},
() => {
storageRef.snapshot.ref
.getDownloadURL()
。然后(下载URL=>{
if(lastFileName==item.name){
someFunc();
}
});
}
);
})
)。然后(()=>警报(“异步触发”);

然后(()=>警报(“异步触发”)code在提交文件时立即启动

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

我认为您要做的是返回一个解析为下载URL的承诺,您可以通过以下方式实现:

return new Promise(function(resolve, reject) {
  storageRef.on(
    firebase.storage.TaskEvent.STATE_CHANGED,
    snapshot => {...},
    error => { reject(error); },
    () => {
      storageRef.snapshot.ref
        .getDownloadURL()
        .then(downloadURL => {
          if (lastFileName === item.name) {
            resolve(downloadURL);
          }
        }).catch(error) { reject(error); }
    }


我在这里发现Doug的答案非常有效=>它只记录下载URL,这意味着您还不能在
)中使用它但如果这就是你所需要的,那就去做吧!最初我想做的就是在上传完所有文件后启动一些功能,但我也会记住你的解决方案。