首页 > 代码库 > [Angular-Scaled Web] 9. Control your promises with $q

[Angular-Scaled Web] 9. Control your promises with $q

Learn how to manually control how asynchronous requests are handled with the use of promises. Because $http is built to work with promises, we saw a foreshadow of them in the previous lesson. We will take this a step further but seeing how to manually create a promise and then resolve or reject it as we see fit.

 

angular.module(‘eggly.models.categories‘, [])    .service(‘CategoriesModel‘, function ($http, $q) {        var CategoriesModel = {},            URLS = {                FETCH: ‘data/categories.json‘            },            categories;        function extract(result) {            return result.data;        }        function cacheCategories(result) {            categories = extract(result);            return categories;        }        CategoriesModel.getCategories = function() {            return (categories) ? $q.when(categories) : $http.get(URLS.FETCH).then(cacheCategories);        };        CategoriesModel.getCategoryByName = function(categoryName) {            function findCategory(){                return _.find(categories, function(c){                    return c.name == categoryName;                })            }            return $q(function(resolve, reject) {                //resolve it when categories are set                if(categories){                    resolve(findCategory());                }else{                    //if not set, get the categories                    CategoriesModel.getCategories()                        .then(function() {                            resolve(findCategory());                        })                }            })        };        return CategoriesModel;    });

 

[Angular-Scaled Web] 9. Control your promises with $q