I am using $q to wrap a promise around a legacy callback. However, the existing callback doesn't have a value to return. It takes a success function with no parameters.
angular.module('MyModule').service('MyService', function() {
    function initialize() {
        var deferred = $q.defer();
        LegacyFactory.initialize(
            // 'void' Success Callback
            function () {
                deferred.resolve (/* WHAT DO I PUT HERE? */);
            },
            // Error Callback
            function (errorCode) {
                deferred.reject(errorCode);
            });
        return deferred.promise;
    }
});
I can't find a void version of resolve in the AngularJS docs. I can return a dummy value, but then clients might access that dummy value, which would cause confusion.
How do I create an AngularJS promise with no return value?
NOTE: The question AngularJS promise returning empty object is completely different. That question does return a value in the resolve function.
There is no void data type in JavaScript. Instead JavaScript uses the primitive type undefined that is used to represent a variable that has not been assigned a value.
A method or statement that has no return value will return undefined. A function that doesn't use the return statement will return undefined. An argument that isn't passed to a function will be undefined.
I hope you're starting to see the consistent behavior here of undefined.
function foo(x) { console.log(x); }
foo(); // will print undefined
function zoom() {}
console.log(zoom()); // will print undefined
So when you use deferred.resolve() you are passing undefined as the value for the data argument.
To more specifically answer your question.
"How do I create an AngularJS promise with no return value?"
To write JavaScript code that gives the intent of no return value for the promise. You would write this.
deferred.resolve(undefined);
That makes it clear that there is no intended data.
Later in your callback you don't have to define the data argument, but if you want you can.
 foo().then(function(data){
     if(typeof data === 'undefined') {
          // there is no data
     } else {
          // there is data
     });
if you always expect no data, then just do this.
foo().then(function(){
   // handle success
});
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With