0

私は最初に画像をFirebaseに保存してからダウンロードURLを取得する機能を持っています。今ではurlを返すことができます(return urlを参照)。しかし、ネストされているため、この関数が非同期で実行され、空のurlを返すので、関数全体を返す方法がわかりませんgetDownloadURLが返される前に割り当てられていません。関数はFirebaseのgetDownloadURLの返信結果

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

と呼ばれる

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

代わりになるの/providers/usersale-data.ts 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) 
    }) 
} 
  • 私はここで基本的な考え方は、同期呼び出しを行うですので何であるかのスコープを知らないし、それが終了したとき、呼び出し側はその後、一部でそれを処理することができます。以前の答えは間違っていた。なぜなら、被験者は帰ってきたと思ったからだが、それは約束だった。
  • 非同期コードを呼び出しているので、メソッドがいつ返ってくるかわからないため、非同期呼び出しを行うことで適切に処理する必要があります。
+0

'ERROR TypeError:this.usersale.submitImgTemp(...)。subscribeは関数ではありません。 ' – maudulus

+0

これが見つかりました!便利で、間違いなく私は約束/非同期についてより確かな理解を得ました。ありがとう! – maudulus

関連する問題