Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getDownloadURL的Firebase返回结果_Javascript_Typescript_Firebase_Ionic Framework_Firebase Storage - Fatal编程技术网

Javascript getDownloadURL的Firebase返回结果

Javascript getDownloadURL的Firebase返回结果,javascript,typescript,firebase,ionic-framework,firebase-storage,Javascript,Typescript,Firebase,Ionic Framework,Firebase Storage,我有一个功能,首先将图像保存到Firebase,然后返回下载url。现在我能够返回url(请参见return url),但我不知道如何为整个函数返回它,因为它是嵌套的,而且这个函数异步运行,如果在getDownloadURL返回之前没有分配url,它将返回空url 调用函数的位置 takePictureTemp() { var storedImg: any = this.usersale.submitImgTemp(); } /providers/usersale data.ts subm

我有一个功能,首先将图像保存到Firebase,然后返回下载url。现在我能够返回
url
(请参见
return url
),但我不知道如何为整个函数返回它,因为它是嵌套的,而且这个函数异步运行,如果在
getDownloadURL
返回之前没有分配url,它将返回空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);
        });
    });     

}

与其让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)
  })
}
  • 我不知道作用域在哪里,所以这里的基本思想是执行同步调用,当它完成时,调用方可以在then部分处理它。之前的答案是错误的,因为我认为一个主题是返回,但它是承诺
  • 您正在调用异步代码,因此必须通过使调用异步来进行相应的处理,因为您不知道该方法何时返回

    • 错误类型错误:this.usersale.submitImgTemp(…)。订阅不是一个函数
      明白了!非常有帮助,让我对promises/async有了更坚定的理解。谢谢