TypeError:无法读取属性'然后'未定义的#2

时间:2017-06-22 18:40:03

标签: javascript jquery html css angularjs

以下是我的角色应用。

(function () {
  "use strict";

angular
    .module("app.core", ['ngRoute'])
     .controller("dataCtrl", dataCtrl);

dataCtrl.$inject = ['$scope','$location','dataService'];

/* @ngInject */
function dataCtrl($scope, $location, dataService) {
    var methods = {
        'Get': GetCustomers,
    }
    return methods.Get();

    function GetCustomers(id) {
        alert('test');
        var scarData = dataService.read(id, "").then(function (data, err) {
           console.log(data);
        });
    }
}

}());

服务

(function () {

'use strict';

angular
    .module('app.service')
    .factory('dataService', dataService);

dataService.$inject = ['$http', '$q'];

function dataService($http, $q) {

    var service = {
        create: create,
        read: read,
        update: update,
        remove: remove
    }

    return service;

    function read(id,type) {
        return
        $http.get("APIURL")
        .then(success)
        .catch(exception);

        function success(response) {

        }

        function exception(ex) {

        }

    }

  function create() {} 
  function update() {}
  function detete() {}

 }
})`

从控制器调用服务时,我收到以下错误。

  

TypeError:无法读取属性'然后'未定义的

另外,请建议在页面加载时调用控制器的get函数的更好方法。

1 个答案:

答案 0 :(得分:3)

您的问题是由于Automatic Semicolon Insertion导致您的退货声明提前结束。

由于ASI,这个:

    return
    $http.get("APIURL")
    .then(success)
    .catch(exception);

被评估为好像它被写成:

    return;
    $http.get("APIURL")
    .then(success)
    .catch(exception);

请注意,您的$ http调用后返回空值。因此,您的服务方法返回undefined,并且您的$ http调用实际上从未发生过。

解决方案是不在return和$ http

之间添加换行符
    return $http.get("APIURL")
        .then(success)
        .catch(exception);