在我的服务“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;
}
答案 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)
}
}