“无法读取未定义的属性'延迟'”。 AngularJs中的错误。有没有人有办法解决吗?

时间:2016-07-17 05:14:27

标签: angularjs q

在我的服务“customerService”中,我注入了暴露延迟对象的$ q对象。在我的函数“getCustomers”我试图检索延迟对象,但我收到一个错误:“当我运行$ q.defer()方法时,无法读取未定义的属性'延迟'。我已经在stackoverflow上查看了类似的解决方案,但没有一个是足够的。可能是导致此错误的原因是什么?

var mysql = require("mysql");

//creates sql database connection
var connection = mysql.createConnection(
    {
        host:"localhost",
        database: "customer_manager"
    }
);

angular.module('app')
.service('customerService', ['$q','$http', CustomerService]);

function CustomerService($q){
    return {
        getCustomers: getCustomers
    }
}


function getCustomers($q){
    var deferred = $q.defer();
    var query = "SELECT * FROM customers";
    connection.query(query, function(err, res){
        if(err) deferred.reject(err);
        deferred.resolve(res);
    });
    return deferred.promise;
}

3 个答案:

答案 0 :(得分:1)

问题: 1.您已经注入了$ q服务注册服务,因此无需显式传递函数参数。 2.如果是角度服务,您必须将所有公开API与相关联,而不是将其返回。否则它将无法工作。我们会在角度工厂的情况下返回暴露API。

下面附有正确的代码:

angular.module('app')
.service('customerService', ['$q','$http', CustomerService]);

function CustomerService($q, $http){
    this.getCustomers = function(){
       var deferred = $q.defer();
       var query = "SELECT * FROM customers";
       connection.query(query, function(err, res){
          if(err) deferred.reject(err);
          deferred.resolve(res);
       });
       return deferred.promise;
    }
}

这将解决您的问题。

干杯!!!

答案 1 :(得分:0)

您将$q作为参数传递给getCustomers函数。 $q会自动在您服务的所有功能中使用。

另外,将CustomerService($q)更改为CustomerService($q, $http)

答案 2 :(得分:0)

function CustomerService($q){
    return {
        getCustomers: getCustomers($q)
    }
}