Chapter 8: Chaining promises and promise handlers

HTML

<script src="https://code.angularjs.org/1.3.2/angular.min.js"></script>
<div ng-app="myApp" ng-controller="Ctrl" />

JavaScript

angular.module('myApp', [])
.controller('Ctrl', function ($q, $log) {
    var deferred = $q.defer()
    , promise = deferred.promise;
    
    promise
    .then(
        // resolved handler
        function() {
            $log.log('success');
        },
        // empty rejected handler
        null,
        // notification handler
        $log.log
    );
    
    function resolveWithProgressNotifications() {
        for (var i=0; i<=100; i+=20) {
            // pass the data to the notification handler
            deferred.notify(i);
            if (i>=100) { deferred.resolve() };
        };
    }
    
    resolveWithProgressNotifications();
    // 0
    // 20
    // 40
    // 60
    // 80
    // 100
    // "success"
});