Angularjs non-promise callbacks

http://angularjs.org/

by fiddlegrimbo

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.1.1/angular.js"></script>
<div ng-controller="MyCtrl"></div>

JavaScript

function printArgs() {
        console.log.apply(console, arguments);
    }
    
    var printSuccess = printArgs.bind(null, "success");
    var printFail = printArgs.bind(null, "fail");
    
    function successCallback() {
        console.log("success", this);
        return "success-result";
    }
    
    function errCallback() {
        console.log("err", this);
        return "err-result";
    }
    
    function wrapCallback(dfd, type, callback, ctx) {
        ctx = ctx || this;
        return function () {
            var result = callback.apply(ctx, arguments);
            dfd[type](result);
        };
    }
    
    var myApp = angular.module('myApp', []);
    
    function MyCtrl($scope, $q) {
        var dfd = $q.defer();
        var wrappedSuccess = wrapCallback(dfd, "resolve", successCallback);
        var wrappedErr = wrapCallback(dfd, "reject", errCallback);
        var rnd = Math.random();
        var success = (rnd > 0.5);
        success ? wrappedSuccess() : wrappedErr();
        console.log(rnd, "calling " + (success ? "success" : "err") + " callback");
        dfd.promise.then(printSuccess, printFail);
    }