I have a function(uploadOne) inside fileUpload service that uses $q and returns a promise:
function uploadOne(some input)
    {
        var deferred = $q.defer();
        if (everything is OK) deferred.resolve(some Data);
        else deferred.reject(some error);
        return deferred.promise;
    }
I inject fileUpload service and call uploadOne function inside my controller:
.controller('myController', ['$scope', 'lessonsService', 'fileUpload',
function ($scope, lessonsService, fileUpload) {
  //outside variable
  $scope.lessonData = {};
  fileUpload.uploadOne(some input data).then(function (some response data) {
    console.log($scope.lessonData); //is undefined
    lessonsService; //is undefined
  }, function (err) {
      //some code here
  });
}])
The problem is that the variable declared outside the success function ($scope.lessonData) is undefined. In addition, I cannot even use my other service (lessonsService) there since it is also undefined! I've seen the same behavior in other posts but none of them help. What mistake am I making?
As you noticed the code above is a simplified version of my real code. Here is my real code. I'm using ng-file-upload to upload a photo in my mongoDB database. When the image is stored in the database, the id of the image is returned from the server:
  .controller('UserPanelPostsController', ['$scope', 'lessonsService', 'fileUpload',
function ($scope, lessonsService, fileUpload) {
  //outside variable
  $scope.lessonData = {};
  $scope.submitLesson = function () {
    fileUpload.uploadOne($scope.file).then(function (imgData) {
      imgData; //is OK
      console.log($scope.lessonData); //is undefined
      lessonsService; //is also undefined
    }, function (err) {
      //some code here
    });
  };
}])
Here is my service:
 .service('fileUpload', ['$resource', '$http', 'baseURL', 'Upload', '$q',
function ($resource, $http, baseURL, Upload, $q) {
  var deferred = $q.defer();
  this.uploadOne = function (file) {
    Upload.upload({
      url: baseURL + 'pictures',
      data: {file: file}
    }).then(function (resp) {
      deferred.resolve(resp.data);
    }, function (resp) {
      deferred.reject(resp.status);
    }, function (evt) {
      //some code here
    });
    return deferred.promise;
  };
}])
