私は変数に約束返された値を割り当てようとしていますが、割り当てていません。私はconsole.log(this.imageref1)の時でもまだ空文字列を取得しています。 ここでの目的は、firebaseに写真をアップロードした後に返されるdata.downloadURLを取得することです。私はダウンロードしたURLが必要です。イメージパスのために私のデータベースにそれを保存する。私はここで立ち往生しています、私のデータベースは、downloadURLの空のデータを取得します。プロミスの返品データをクラス変数に割り当てることはできませんか?
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はあなたの回答のバディ! ..関数の流れをブロックしないでください。?(関数が関数全体の流れになるようにするには、この全体を設定する必要があります 'imageRef.putString(this.capturedimage1、firebase.storage。 StringFormat.DATA_URL).then(data => {that.imageref1 = data.downloadURL;}); '関数に? – Mikethetechy
@Mikethetechy:あなたは*非同期から同期に移行できません。ランタイムは、「私はこれでやめようとはしていません」と言っています。それを騙す方法はありません。「いいえ、実際はこれでやめようとしています。約束が定義されている関数の中にまだいる場合、そのコールバック*はまだ起動されていません*と*は起動しません*:後でスケジュールされます。プログラム全体を非同期的に考える必要があります。もしその一部が分かっているなら、あなたが知っている前にそれをしようとするよりも、この値を知っているときに起こる '.then()'コールバックにデータベース挿入 - 。 –
あなたの返信のためのthx ...今私はどのように非同期関数が動作するかを知っています。私がデータベースの挿入を行う唯一の方法は.then()コールバックです。しかし、私はそれらをアップロードした後の画像のリストを持っています。私はダウンロードURLをデータベースに保存するためにダウンロードURLを取得する必要があります....そのかなり挑戦的です...私はまだダウンロードURLを取得する必要があります。 – Mikethetechy