我正在ionic+angularfire2
创建一个应用,我想将一些图片上传到firebase storage
,但我希望一次上传所有图片,或者至少X
上传(x > 1)
1}}。
现在我像这样上传它们
async imageUpload(name, file) {
// The storage path
const path = name;
// The main task
let img = 'data:image/jpg;base64,' + file;
return this.task = this.afStorage.ref('/').child(name).putString(img, 'data_url').then((snapshot) => {
console.log(snapshot)
}).catch((err) => {
console.log(err);
});
}
然后我只是循环包含文件的数组
let newDocId = this.afStore.createId();
for (var i = 0; i < this.lotProvider.uploadFoto.b64Image.length; i++) {
let name = 'feriaganadera/'+newDocId +'/'+ (+ new Date()) + "-image_foto_jpeg_" + i + ".jpeg";
this.imageUpload(name, this.lotProvider.uploadFoto.b64Image[i]);
}
该工作,文件已上传,但必须等待文件上传下一个文件。
如何调用异步函数?所以imageUpload
不必等待图像。
答案 0 :(得分:1)
尝试使用Promise.all,首先修改您的imageUpload
函数以返回一个承诺:
imageUpload(name, file) {
return new Promise((resolve, reject) =>{
// The storage path
const path = name;
// The main task
let img = 'data:image/jpg;base64,' + file;
this.task = this.afStorage.ref('/').child(name).putString(img, 'data_url').then((snapshot) => {
console.log(snapshot);
resolve(snapshot);
}).catch((err) => {
console.log(err);
reject(err);
});
});
}
将Promise.all与您的base64字符串数组一起使用:
Promise.all(this.lotProvider.uploadFoto.b64Image.map(async (img) => {
console.log(img);
const content = await this.imageUpload('name','file');
return content;
}))
.then(values => {
console.log(values);
})
.catch((err) => {
console.log(err);
});
在创建promises时,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''