В дополнение к ответу ittus учтите, что в вашем методе saveNewAticle()
вы вызываете две асинхронные операции (add()
и put()
), не связывая их в цепочку.
Поскольку вы уходите с текущей веб-страницы (с this.$router.push("/");
) , когда запись в базу данных завершена (т. Е. Когда разрешается обещание, возвращенное методом add()
), вы можетепокиньте страницу до того, как метод Firebase Storage put()
будет завершен.
Чтобы избежать такого поведения, вы должны связать свои обещания, возвращенные этими двумя методами.Поскольку вас интересует только знание о завершении загрузки, вы можете использовать метод then()
следующим образом (вместо прослушивания событий с on()
):
saveNewAticle() {
db
.collection("storys")
.add({
title: this.title,
summary: this.summary,
article: this.article
})
.then(docRef => {
console.log("Client added: ", docRef.id);
var storageref = storage.ref()
var thumbnailref = storageref.child("images")
var file = thumbnail
var uploadTask = storageRef.child('images/${file}').put(file)
return uploadTask;
})
.then(uploadTaskSnapshot => {
return uploadTaskSnapshot.ref.getDownloadURL();
})
.then(downloadURL => {
console.log('File available at', downloadURL);
this.$router.push("/");
})
.catch(error => {
console.error("Error adding employee: ", error);
});
}