我有一个名为serviceCallJson
的服务从JSON文件获取数据,我有另一个服务validateIn
,它根据JSON中存在的数据验证用户的输入。
(function() {
"use strict";
var serviceCallJson = function($http) {
this.getCustomers = function() {
var promise = $http({
method : 'get',
url : '../viewersData/userPwdPair.json'
})
.success(function(data) {
return data;
});
}
}
var validateIn = function (serviceCallJson) {
this.called = function(username, password) {
this.returnedData = serviceCallJson.getCustomers();
console.log(this.returnedData); //undefined
var i = 0;
angular.forEach(this.returnedData, function(value, key){
while (i < 10) {
if(value[i].username == username) {
if(value[i].password == password) {
alert("Logged In");
}
}
i = i + 1;
}
});
}
}
angular.module('assignment1App')
.service ('serviceCallJson', serviceCallJson)
angular.module('assignment1App')
.service ('validateIn', ['serviceCallJson', validateIn])
}())
我有以下问题:
1)我不明白为什么returnedData' is
未定义when I am returning the data fetched by the
serviceCallJson service on
成功?
2)当console.trace()
中的console
时,我得到以下结果:
为什么我无法看到堆栈跟踪? (我希望看到我的控制器函数被调用,但它返回一个匿名函数)
第一个问题的解决方案
感谢您的所有评论。他们在调试我的应用程序时非常有帮助。以下代码使其工作。我仍然无法弄清楚第二个问题。
serviceCallJson
服务
(function() {
"use strict";
var serviceCallJson = function($http) {
this.getCustomers = function() {
return $http({
method : 'get',
url : '../viewersData/userPwdPair.json'
});
};
};
angular.module('assignment1App')
.service ('serviceCallJson', serviceCallJson);
}());
validateIn
服务:
(function() {
"use strict";
var validateIn = function (serviceCallJson) {
this.called = function(username, password) {
serviceCallJson.getCustomers()
.then(function (returnedData) {
var i = 0;
var j = 0;
angular.forEach(returnedData.data, function(value){
while (i < 10) {
if(value[i].username == username) {
if(value[i].password == password) {
console.log("Logged In");
j = j + 1;
}
}
i = i + 1;
}
if (j === 0) {
console.log("Username or password is wrong");
}
});
});
};
};
angular.module('assignment1App')
.service ('validateIn', ['serviceCallJson', validateIn]);
}());
更新 - 第二个问题
Console.trace()
正在记录匿名函数而不是正在调用的方法名称,因为我在控制台中独立调用它。我的console.trace()
服务中validate
的以下用法提供了正确的堆栈跟踪,其中包含正在调用的所有函数名称和属性。
(function() {
"use strict";
var validate = function (fetchDataService) {
this.verify = function(username, password) {
console.trace();
fetchDataService.getCustomers()
.then(function (returnedData) {
var i = 0;
var count = 0;
angular.forEach(returnedData.data, function(value){
while (i < 10) {
if(value[i].username == username) {
if(value[i].password == password) {
console.log("Logged In");
count = count + 1;
}
}
i = i + 1;
}
if (count === 0) {
console.log("Username or password is wrong");
}
});
});
};
};
angular.module('assignment1App')
.service ('validate', ['fetchDataService', validate]);
}());