我有一个angularjs工厂,我执行了$ http.get请求以获取JSON数据并进行比较。我尝试返回过滤后的列表,但它似乎不起作用。
app.service('ScopeService', ['$http', '$q', function($http, $q){
var service = {};
var permsList = [],
codeMapping;
var perms = {
"admin": true,
"dev": true,
"qa": true,
"audit": false,
"general": true,
"grp1": false,
"grp2": false,
"grp3": false,
"grp4": false,
"grp5": true,
"env": "DEV",
"version": "1.6.3"
}
function mapping() {
$http.get('./utils/codeMapping.json').then(function (response) {
codeMapping = response.data.codeMapping;
function findBU(BG) {
return _.find(codeMapping, ['id', Name]).number
}
if (perms.grp1) {
permsList = permsList.concat(findBU('A'));
}
if (perms.grp2) {
permsList = permsList.concat(findBU('B'));
}
if (perms.grp3) {
permsList = permsList.concat(findBU('C'));
}
if (perms.grp4) {
permsList = permsList.concat(findBU('D'));
}
if (perms.grp5) {
permsList = permsList.concat(findBU('E'));
}
if (perms.audit) {
permsList = [];
}
$q.resolve(permsList);
});
}
service.getMapping = function() {
return mapping();
};
service.getMapping().then(function(res) {
console.log(res)
})
return service;
}]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
因此,“外部”为我提供了我想要的数据,但无法在getMapping函数中使用。
我认为这是由于时间不匹配,因为在添加getMapping的值之前使用空对象调用服务。
请帮忙。
最佳答案
从您提供的代码中很难分辨出它是如何使用的。但是,似乎您没有在返回诺言,而是在返回数组对象。另外,我不确定您为什么要在获取请求时链接另一个。试试这样的东西...
在这里查看工作示例:
http://jsfiddle.net/riegersn/rnd4ujfd/12/
app.service('ScopeService', ['$http', '$q', function($http, $q) {
var service = {};
var permsList = [],
codeMapping;
var perms = {
"admin": true,
"dev": true,
"qa": true,
"audit": false,
"general": true,
"grp1": false,
"grp2": false,
"grp3": false,
"grp4": false,
"grp5": true,
"env": "DEV",
"version": "1.6.3"
}
service.getMappings = function() {
return $http.get('https://jsonplaceholder.typicode.com/users/1').then(function(response) {
/* manipulate your data */
permsList.push('some data!');
console.log(permsList);
return $q.resolve(permsList);
});
}
return service;
}]);