[英]AngularJS factory with promises not working properly
我有一个 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 值之前使用空对象调用服务时时间不匹配。
请帮忙。
从您提供的代码来看,很难判断您是如何使用它的。 但是,您似乎没有返回承诺,而是返回了一个数组对象。 另外,我不确定你为什么要在你的 get 请求中链接另一个。 尝试这样的事情......
在这里查看一个工作示例: 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;
}]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.