在$ q解析函数之外声明的访问变量,在resolve函数

时间:2017-09-28 13:44:05

标签: javascript scope promise angular-promise

我在 fileUpload 服务中有一个功能( uploadOne ),使用 $ q 并返回承诺

function uploadOne(some input)
    {
        var deferred = $q.defer();
        if (everything is OK) deferred.resolve(some Data);
        else deferred.reject(some error);
        return deferred.promise;
    }

我注入 fileUpload 服务并在我的控制器中调用 uploadOne 功能:

.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
  });
}])

问题是在成功函数( $ scope.lessonData )之外声明的变量是未定义的。另外,我甚至不能使用我的其他服务( lessonsService ),因为它也是未定义的!我在其他帖子中看到了相同的行为,但没有一个有用。我犯了什么错误?

正如您所注意到的,上面的代码是我的真实代码的简化版本。  这是我的真实代码。我正在使用 ng-file-upload 在我的 mongoDB 数据库中上传照片。当图像存储在数据库中时,图像的 id 将从服务器返回:

  .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
    });
  };
}])

这是我的服务:

 .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;
  };

}])

0 个答案:

没有答案