0

Ich habe eine Funktion, die zuerst ein Image in Firebase speichert und dann die Download-URL zurückbekommt. Im Moment bin ich in der Lage, die url zurück zu bekommen (siehe return url), aber ich weiß nicht, wie man es für die Funktion als Ganzes zurückgibt, da es verschachtelt ist, und da diese Funktion asynchron läuft und die URL leer zurückgibt, falls Es wurde nicht zugewiesen, bevor getDownloadURL zurückgegeben wurde.Firebase-Rückgabeergebnis von getDownloadURL

Wo Funktion aufgerufen wird

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); 
     }); 
    });  

} 

Antwort

1

Statt der submitImgTemp() herauszufinden, was mit der URL zu tun haben Der Aufrufer von submitImgTemp() handhabt, was zu tun ist.

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) 
    }) 
} 
  • Ich weiß nicht, welche Bereiche sind, wo so die Grundidee hier ist ein Sync-Aufruf tun und wenn es fertig ist, kann der Anrufer damit umgehen in dem dann Teil. Die vorherige Antwort war falsch, weil ich dachte, ein Thema würde zurückkehren, aber es war Versprechen.
  • Sie rufen Async-Code auf, so dass Sie entsprechend umgehen müssen, indem Sie Ihren Aufruf asynchron ausführen, da Sie nicht wissen, wann die Methode zurückgegeben wird.
+0

'FEHLER TypeError: this.usersale.submitImgTemp (...). Subscribe ist keine Funktion' – maudulus

+0

Got it! Super hilfreich und definitiv gab mir einen festeren Zugriff auf Versprechen/Async. Vielen Dank! – maudulus

Verwandte Themen