AngularJS工厂承诺无法正常工作

时间:2018-03-01 16:25:15

标签: javascript angularjs

我有一个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>
&#13;
&#13;
&#13;

所以&#34;外面&#34;给了我想要的数据,但它不能在getMapping函数中工作。

我认为这是因为时间不匹配,因为在添加getMapping的值之前,使用空对象调用服务。

请帮忙。

1 个答案:

答案 0 :(得分:1)

根据您提供的代码,您有点难以说明您是如何使用此代码的。但是,您似乎没有返回承诺,而是返回一个数组对象。另外,我不确定你为什么要链接另一个接收请求。尝试这样的事情......

在这里查看一个工作示例: 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;
}]);