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