同步检索Firebase存储网址?
我有这样的文件名列表对象的列表:同步检索Firebase存储网址?
Object 1
Files
file1:1234
file2:2345
Object 2
Files
file1:456
file2:656
我遍历每个对象,其中的每一个对象,我遍历每个文件和查询火力存储获取每个文件的网址。以便将其作为超链接显示给数据表。
var tableData = [];
//Code to Loop over the objects
var myApp ={ fileurls:[]};
var i =0;
angular.forEach(filesContainer.filenames, function(value, key) {
storageRef.child('/myfiles/'+ value)
.getDownloadURL().then(function(url) {
myApp.fileurls[i] = url;
i++;
}
}).catch(function(error) {
console.log("Error");
});
});
tableData.push();
//Loop over object ends here
//invoke successcallbackfunction to display the tableData
successcallbackfunction(tableData);
与我上面的代码的问题是,由于asycnhronous火力电话,myApp
阵列始终是空的。我如何才能确保tableData.push()
行仅在循环完成对象的文件时才能执行?
尝试修改此:
angular.forEach(filesContainer.filenames, function(value, key) {
storageRef.child('/myfiles/'+ value)
.getDownloadURL().then(function(url) {
myApp.fileurls[i] = url;
i++;
}
}).catch(function(error) {
console.log("Error");
});
到:
angular.forEach(filesContainer.filenames, function(value, key) {
storageRef.child('/myfiles/'+ value)
.getDownloadURL().then(function(url) {
myApp.fileurls[i] = url;
i++;
if (i == filesContainer.filenames.length) {
tableData.push();
//Loop over object ends here
//invoke successcallbackfunction to display the tableData
successcallbackfunction(tableData);
}
}
}).catch(function(error) {
console.log("Error");
});
所以一旦最后一次迭代完成后,再执行所需的代码。
时的错字,我需要在对象循环结束而不是文件循环后进行成功回调。我的对象循环本质上是forEach on firebase查询快照 – user2713255
您的对象循环代码在哪里? –
The Reference.getDownloadUrl()
function returns a Promise
。因此,这意味着你可以做平时的承诺与Promise.all()
收集:
var tableData = [];
var i =0;
var promises = [];
angular.forEach(filesContainer.filenames, function(value, key) {
promises.push(
storageRef.child('/myfiles/'+ value).getDownloadURL()
});
});
Promise.all(promises).then(functions(urls) {
var myApp ={ fileurls: urls };
tableData.push();
successcallbackfunction(tableData);
}).catch(function(error) {
console.log("Error");
});
一件事,你需要通过改变VAR对myApp = {fileurls []}更新JavaScript代码; var myApp = {fileurls:[]}; ? –
是粘贴错误代码 – user2713255