The `this` pointer is different inside the callback function. So, you need to save it into a different variable. Then, use that variable instead of `this` inside your callback. For a Lightning helper, I save it to one called `helper` save : function(component) { // ... var fr = new FileReader(); var helper = this; fr.onload = function() { var fileContents = fr.result; var base64Mark = 'base64,'; var dataStart = fileContents.indexOf(base64Mark) + base64Mark.length; fileContents = fileContents.substring(dataStart); alert("WORKING"); //check at this point- alert works helper.upload(component, file, fileContents); alert("DID IT WORK?"); // This alert not shown so upload call not working }; fr.readAsDataURL(file); //fr.onload function triggered from here }, upload: function(component, file, fileContents) { alert("Here"); //NEVER CALLED } See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this