繁体   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