1

I have a function that gets called in two different scenarios. Scenario 1 gets triggered by a dropbown selection, and I set the variable "sheetName" based on the selected value. Scenario 2 doesn't have a trigger event, so I want to set the variable further down in my code when I gathered the other information I need in order to set the value.

Now here's my problem: When Scenario 1 occurs, sheetName gets defined and the function proceeds. But with the code below, sheetName appears to be undefined as soon as it reaches the if condition for the second code. So the value gets overwritten here because the program thinks, sheetName is undefined.

Whenever I remove the if condition for the second scenario everything works fine and sheetName has the correct value I defined earlier in the code.

I can't define the two values within an if/else statement because for the first scenario I need the oEvent and for the second scenario I need the wb data.. Why does the if condition remove the value of my variable? Am I checking incorrectly?

Please let me know if you need anything else!

 onSheetSelected : function(oEvent) {
        var file = sap.ui.getCore()._file;
        var oTable = this.getView().byId('uploadData');
// Sheet name gets defined for Scenario 1       
        if(oEvent !== undefined) {              
            var sheetName = oEvent.getSource().getSelectedItem().getText();
        }
        if(file && window.FileReader){
            var reader = new FileReader();
            var result = {}, data;
            reader.readAsBinaryString(file);
            reader.onload = function(e) {
                var rawLog = reader.result;
                data = e.target.result;
                var wb = XLSX.read(data, {type: 'binary', cellDates: true, cellText: false, cellNF: true});
// Sheetname gets defined for Scenario 2
                if(sheetName === undefined) {
                    var sheetName = wb.SheetNames[0];   
                }
                var worksheet = wb.Sheets[sheetName];
                        ... some other stuff going on...
            }.bind(this);
        };
    },
1
  • 1
    You're re-declaring the variable, in Scenario 2, remove the var Commented Nov 21, 2018 at 14:34

1 Answer 1

1

You're running into this issue due to JavaScript Hoisting the variable where you're re-declaring it in the second scenario

function thing1() {
  var sheetname = "this"
  //this will look at thing1.sheetname
  console.log(sheetname)

  function thing2() {
    // this will look at thing2.sheetname
    if (sheetname === undefined) {
      var sheetname = "that"
    }
    console.log(sheetname)
  }
  thing2()
}

thing1()

But by removing the var it will look up until it can find a variable called sheetname

function thing1() {
  var sheetname = "this"
  //this will look at thing1.sheetname
  console.log(sheetname)

  function thing2() {
    // this will look at thing1.sheetname
    if (sheetname === undefined) {
      sheetname = "that"
    }
    console.log(sheetname)
  }
  thing2()
}

thing1()

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.