Ionic3上Firebase Storage和Firestore的异步函数出现问题



我正在尝试从我上传的图像中获取下载URL。使用此功能,我将图像上传到Firebase Storage

uploadImage() {
this.image = 'movie-' + new Date().getTime() + '.jpg';
let storageRef: any,
parseUpload: any;
return new Promise((resolve, reject) => {
storageRef = firebase.storage().ref('imgs/' + this.image);
parseUpload = storageRef.putString(this.cameraImage, 'data_url');     
})

问题是,我想保存图像URL,这样我就可以从Firestore上的文档中获取它。为了做到这一点,我有这个功能,一旦上传图像,就可以获得dowloadURL。

如果我没有错,这个方法应该返回一个字符串,如果我错了,请纠正我,因为如果不是,我将无法将其保存在Firestore 上

async getImgFromServer(imgName: string) {
let img;
let downloadIMG;
img = firebase.storage().ref("/imgs/" + imgName).getDownloadURL();
let ref= firebase.storage().ref();
const imgRef = ref.child("/imgs/" + imgName);
const downloadURL = await imgRef.getDownloadURL()
return downloadURL
}

唯一的问题是,为了做到这一点,必须上传图像。我知道如果上传了图片,这个函数总是会返回url。问题是,当uploadImage((完成时,我不知道如何使这个函数工作。在获得url之后,这是我在Firestore Cloud数据库中保存url的函数。

updateImgFromServer(image,id){
this.firestore.doc(`public/${id}`).set({
img:image,
});
}

有没有办法确保第二个函数(getImgFromServer(((只有在第一个函数(uploadImage((完成后才能执行?

我知道有一些方法可以在我放的第一个片段上传文件后获得下载URL。如果有人知道如何让它发挥作用,那也没关系。

putString((是异步的,它返回一个UploadTask,用于跟踪您需要使用的上传进度。它有一个then((方法,它的工作原理就像promise一样,所以用它来确定上传何时完成。

最新更新