Ionic3上的Firebase Storage和Firestore的异步功能存在问题

时间:2018-12-04 00:29:13

标签: typescript firebase ionic-framework ionic3 firebase-storage

我正在尝试从我上传的图像中获取downloadURL。 使用此功能,我可以将图像上传到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()完成时,我不知道如何使此功能起作用。 获取网址后,这是我将网址保存在Firestore Cloud数据库中的功能。

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

是否有办法确保仅在第一个函数( uploadImage())完成后才执行第二个函数( getImgFromServer())?

我知道,一旦在我放置的第一个代码段中上传了文件,就有一些方法可以获取downloadURL。如果有人知道如何使它工作,那也可以。

1 个答案:

答案 0 :(得分:1)

putString()是异步的,并返回一个UploadTask来跟踪您需要使用的上载进度。它具有then()方法,其工作方式类似于promise,因此可以使用该方法来确定何时完成上传。

相关问题