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