【发布时间】:2018-05-25 04:10:10
【问题描述】:
我正在使用 ionic 3 和 firebase 构建应用。基本上,我希望能够拍摄多张照片,将它们上传到 Firebase 存储,然后获取指向这些照片的链接并将这些链接放在 Firestore 中的文档中。但是,我遇到了包含 downloadURLs 的数组的奇怪行为。如果我运行该函数一次,它会将文档上传到 Firestore,但带有下载链接的数组是空的。如果我再次运行该功能,则会显示链接。这是我的代码:
变量:
export class AboutPage {
public photos: any;
public downloadURLs: any;
public link: string;
public base64Image: string;
ngOnInit() {
this.photos = [];
this.downloadURLs = [];
}
功能:
// Note: The uploading of the images works completely fine
uploadForm() {
//var testArray = [];
var kuerzel = "teacher";
var lehrerKuerzel = kuerzel.toUpperCase();
var date = Date();
var length = this.photos.length;
var i = 0;
while(i < length){
const ref = firebase.storage().ref(`pruefungen/${lehrerKuerzel}/${date}/${i}`);
ref.putString(this.photos[i], 'data_url').then((snapshot) => {
this.downloadURLs.push(snapshot.downloadURL);
});
if(i + 1 == length)
{
var db = firebase.firestore().collection(`${lehrerKuerzel}`);
db.add({
TestName: pruefungsName,
Klasse: klasse,
Abteilung: abteilung,
Datum: date,
DownloadURLs: this.downloadURLs,
Length: length,
I: i
});
}
i += 1;
}
}
我尝试过的:
使用本地数组
把 db.add({});在 .then() 中,虽然数组总是完全显示,但包含 i 的 if 语句总是正确的,因为某些原因 i 总是 == 长度。因此,集合中的项目总是太多。
【问题讨论】:
-
一件事...使用 ionic 你想在
ionViewDidLoad生命周期钩子中初始化downloadURLs和photos...它的触发时间与 angular 的ngInit略有不同 -
我试过这个,但是我不能再拍照,这让我相信它根本没有被初始化。还有其他想法吗?
标签: typescript firebase ionic-framework ionic3