AngularJS:angular.js:13920 TypeError:无法读取未定义的属性'then'

时间:2018-09-25 07:38:53

标签: angularjs

我正在使用angularJS调用后端服务以上传多部分文件,但是遇到错误。响应来自我的服务,但是由于上述承诺错误,我无法从那里获得对角度控制器的响应。

fileUploadService:

(function() {
'use strict';
angular
    .module('module')
    .factory('FileUpload', FileUpload);

FileUpload.$inject = ['$http'];

function FileUpload($http) {
    this.uploadFileToUrl = function(file, uploadUrl){
        var fd = new FormData();    
        fd.append('file', file);
        $http.post(uploadUrl, fd, {
            transformRequest: angular.identity,
            headers: {'Content-Type': undefined}
        })
        .success(function(response){
        })
        .error(function(error){
        });
    }
        return this;
}
})();

controller.js:

        $scope.onFilesSelected = function(files) {

       var uploadUrl = "/api//customer/logo";

       FileUpload.uploadFileToUrl(files[0], uploadUrl).then(
           function(result){
               var logo =  FileUpload.getResponse();
               vm.setLogo(logo);
              // $scope.errors = FileUpload.getResponse();
           }, function(error) {
                alert('error');
           });
    };

2 个答案:

答案 0 :(得分:0)

您的uploadFileToUrl()函数没有return语句,因此它返回undefined。我想您是要退还$http返回的承诺:

this.uploadFileToUrl = function(file, uploadUrl) {
    var fd = new FormData();    
    fd.append('file', file);
    // Notice the return statement below
    return $http.post(uploadUrl, fd, {
        transformRequest: angular.identity,
        headers: {'Content-Type': undefined}
    })
    .success(function(response){
    })
    .error(function(error){
    });
}

答案 1 :(得分:0)

您没有返回任何值。因此,如下所示在成功和错误回调中返回响应

.success(function(response){
return response;
    })
.error(function(error){
return error
    });