簡體   English   中英

承諾無法正常工作的 AngularJS 工廠

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM