Ich versuche, den Wert der versprochenen Rückgabe an eine Variable zuzuweisen, aber es wird nicht zugewiesen. Ich bekomme immer noch leere Zeichenfolge, wenn ich console.log (this.imageref1). Ziel ist es, die Datei data.downloadURL abzurufen, die nach dem Hochladen des Fotos in den Firebase zurückgegeben wird. Ich brauche die heruntergeladene URL. um es in meiner Datenbank für den Bildpfad zu speichern. Ich stecke hier fest, meine Datenbank bekommt leere Daten für die DownloadURL.Promise-Rückgabedaten können der Klassenvariablen nicht zugewiesen werden?
post_news(form: NgForm){
this.title = form.value.title;
this.content = form.value.content;
this.category = form.value.category;
console.log(this.capturedimage1);
if(this.capturedimage1 !== ''){
//console.log('captured image is not empty');
let storageRef = firebase.storage().ref();
const filename = Math.floor(Date.now()/1000);
const imageRef = storageRef.child(`images/${filename}.jpg`);
let uploaded_file_path = `images/${filename}.jpg`;
imageRef.putString(this.capturedimage1, firebase.storage.StringFormat.DATA_URL).then(data=>{
this.imageref1 = data.downloadURL;
});
}
}
Thxx für Ihre Antwort Kumpel !. Ohh das bedeutet, was auch immer in der. Thhen ({. ..wird den Fluss der Funktion nicht blockieren, richtig? um das zu erzwingen. Dann ({Funktion, um im Fluss der gesamten Funktion zu sein, muss ich diese ganze Sache setzen 'imageRef.putString (this.capturedimage1, firebase.storage. StringFormat.DATA_URL) .dann (data => {that.imageref1 = data.downloadURL;}); 'zu einer Funktion? – Mikethetechy
@Mikethetechy: Sie * kann * nicht von asynchron zu synchron gehen. Die Laufzeit sagt: "Ich werde nicht damit aufhören", und es gibt keine Möglichkeit, es reinzulegen, "nein, eigentlich wirst du damit aufhören." Wenn Sie sich noch in der Funktion befinden, in der das Versprechen definiert wurde, hat der Rückruf * noch nicht ausgelöst * und * wird nicht ausgelöst *: Er wird später geplant. Sie müssen asynchron über das gesamte Programm nachdenken, wenn ein Teil davon ist, also setzen Sie irgendwelche Datenbank-einfügen-whatevers in den '.then()' Callback zu passieren, wenn Sie diesen Wert kennen, anstatt zu versuchen, es zu tun, bevor Sie wissen . –
thx für Ihre Antwort ... jetzt bekomme ich, wie asynchrone Funktionen funktionieren..so die einzige Möglichkeit für mich, die Datenbank einfügen ist in der. Then() -Rückruf. aber ich habe eine Liste von Bildern, nachdem ich sie hochgeladen habe, ich muss die Download-URL erhalten, um die Download-URL in der Datenbank zu speichern .... es ist ziemlich herausfordernd ... egal, welche Art und Weise ich versuche, ich muss immer noch die Download-URL .. . – Mikethetechy