Firebase返回getDownloadURL的结果

时间:2017-05-18 17:47:31

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

我有一个功能,首先将图像保存到Firebase,然后取回下载网址。现在我能够得到url(参见return url),但我不知道如何将它作为一个整体返回,因为它是嵌套的,并且因为这个函数运行异步并且如果在getDownloadURL返回之前尚未分配url,则将返回空。

调用函数

takePictureTemp() {
  var storedImg: any = this.usersale.submitImgTemp();
}

/providers/usersale-data.ts

submitImgTemp() {

    let storageRef = firebase.storage().ref();
    // Create a timestamp as filename
    const filename = Math.floor(Date.now() / 1000);

    // Create a reference to 'images/todays-date.jpg'
    const imageRef: any = storageRef.child(`userImages/${filename}.jpg`);

    imageRef.putString("data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 9TXL0Y4OHwAAAABJRU5ErkJggg==", firebase.storage.StringFormat.DATA_URL).then((snapshot)=> {
        imageRef.getDownloadURL().then(function(url) {
            return url;
        }).catch(function(error) {
            // Handle any errors here
            console.log(error);
        });
    });     

}

1 个答案:

答案 0 :(得分:1)

不要让submitImgTemp()弄清楚如何处理url,而是让submitImgTemp()的调用者处理该怎么做。

takePictureTemp() {
  this.usersale.submitImgTemp().then(d => {
    // d is your url
  }).catch(err => {})
}

submitImgTemp() {
  return new Promise(function(resolve, reject){
     // do your saving here
     // on successful save call resolve(url)
     // on error call reject(error)
  })
}
  • 我不知道哪些范围在哪里,所以这里的基本思想是进行同步调用,当它完成时,调用者可以在当时的部分处理它。之前的回答是错误的,因为我认为一个主题正在回归,但它是Promise。
  • 您正在调用异步代码,因此您必须通过同时调用异步来处理,因为您不知道该方法何时返回。