【发布时间】:2020-06-07 03:36:19
【问题描述】:
我正在 Firebase 上开发一个网络应用程序,并正在编写一个函数来上传到 Firebase 存储并返回用户上传文件的下载 URL。这些文件有顺序,我的目的是按文件顺序存储 URL。
以下函数返回 URL,但它们不是按预期顺序排列的。我想这与不同的文件大小和上传每个文件和下载链接所需的时间不同有关。
如何确保 URL 以预期的顺序存储在 Promise 中?例如我只能在前一个文件的URL存储在promise中之后才能想到调用storageRef.put方法,但是我是编程新手,不知道如何修复它......请帮忙!
function url_array_get(){
const promises = [];
const user=firebase.auth().currentUser;
const filez=review_photo.files;
const files=Array.from(filez); //This is an array of files with specific ordering
files.forEach(function(file) { //The files are uploaded in the intended order
let storageRef=firebase.storage().ref('data/'+user.uid+'/posts/'+file.name);
promises.push(
storageRef.put(file).then(function(snapshot){
return snapshot.ref.getDownloadURL()
})
)
})
return Promise.all(promises); //The returned URLs are not in the intended order
}
【问题讨论】:
-
您确定顺序有误吗?你能发布一些证据吗?在我看来,这段代码保留了 files 数组和 downloadURLs 之间的顺序。我可以看到一种让它更整洁的方法(通过使用 map 而不是 forEach 并将 put 分解为一个单独的函数),但我认为你错了它是错误的。
标签: javascript firebase promise firebase-storage