簡體   English   中英

Javascript從函數返回變量並作為參數傳遞

[英]Javascript return variable from function and pass as parameter

我有此功能將圖像插入Firebase。 我想做的是選擇圖像,將圖像插入Firebase存儲中,獲取其downloadURL,然后為帳戶插入新記錄以及downloadURL。

uploadAsByteArray = async (pickerResultAsByteArray, progressCallback) => {

  try {
var metadata = {
  contentType: 'image/jpeg',
};

let name = new Date().getTime() + "-media.jpg"
var storageRef = firebase.storage().ref();
var ref = storageRef.child('assets/' + name)
let uploadTask = ref.put(pickerResultAsByteArray, metadata)

uploadTask.on('state_changed', function (snapshot) {

  progressCallback && progressCallback(snapshot.bytesTransferred / snapshot.totalBytes)

  var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
  console.log('Upload is ' + progress + '% done');

}, function (error) {
  console.log("in _uploadAsByteArray ", error)
}, function () {
  var downloadURL = uploadTask.snapshot.downloadURL;
  //console.log("_uploadAsByteArray ", uploadTask.snapshot.downloadURL)
  console.log('URLLLLL ' + downloadURL);


  // save a reference to the image for listing purposes
  var ref = firebase.database().ref('assets');
  ref.push({
    'URL': downloadURL,
    //'thumb': _imageData['thumb'],
    'name': name,
    //'coords': _imageData['coords'],
    'owner': firebase.auth().currentUser && firebase.auth().currentUser.uid,
    'when': new Date().getTime()
  })
});
  return downloadURL;
  } catch (ee) {
console.log("when trying to load _uploadAsByteArray ", ee)
  }
}

我想從此函數返回變量downloadURL,並將其作為參數傳遞給我的addNewAccount(),但是我不確定。

addNewAccount = (downloadURL) => {
  console.log(downloadURL);
}

您需要使用回調,就像對progressCallback並在其中傳遞您的downloadURL

然后,您將在這里進行downloadURL URL:

api.uploadAsByteArray(byteArray, (downloadURL) => {
  //console.log('downloadURL' + downloadURL)
  this.setState({ downloadURL: downloadURL})
})

setState之后,您將在組件狀態下具有一個downloadURL,並可以在addNewAccount傳遞它:

<TouchableOpacity onPress={()=> this.addNewAccount(downloadURL)}>

您的函數uploadAsByteArray:

uploadAsByteArray = async(pickerResultAsByteArray, progressCallback) => {

    try {
        var metadata = {
            contentType: 'image/jpeg',
        };

        let name = new Date().getTime() + "-media.jpg"
        var storageRef = firebase.storage().ref();
        var ref = storageRef.child('assets/' + name)
        let uploadTask = ref.put(pickerResultAsByteArray, metadata)

        uploadTask.on('state_changed', function(snapshot) {

            progressCallback && progressCallback(snapshot.bytesTransferred / snapshot.totalBytes)

            var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
            console.log('Upload is ' + progress + '% done');

        }, function(error) {
            console.log("in _uploadAsByteArray ", error)
        }, function() {
            var downloadURL = uploadTask.snapshot.downloadURL;
            //console.log("_uploadAsByteArray ", uploadTask.snapshot.downloadURL)
            console.log('URLLLLL ' + downloadURL);


            // save a reference to the image for listing purposes
            var ref = firebase.database().ref('assets');
            ref.push({
                'URL': downloadURL,
                //'thumb': _imageData['thumb'],
                'name': name,
                //'coords': _imageData['coords'],
                'owner': firebase.auth().currentUser && firebase.auth().currentUser.uid,
                'when': new Date().getTime()
            })
            progressCallback(downloadURL);
        });
    } catch (ee) {
        console.log("when trying to load _uploadAsByteArray ", ee)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM