Any way to know if a variable is an angularjs promise?

I'm making a directive that takes a function as a scope parameter (scope: { method:'&theFunction' }). I need to know if the result returned by that method is an angular promise (if yes something will happen on resolution, otherwise it happens right away).

For now I'm testing if foo.then exists but I was wondering if there was a better way to do it.


Solution 1:

You can use $q.when to wrap the object as a promise (whether it is or not). Then, you can be sure that you are always dealing with a promise. This should simplify the code that then handles the result.

Documentation for $q.when is here with $q.

Solution 2:

Angular's when() is a good option as Davin mentioned.

If that doesn't meet your needs then Angular's internal way of checking (it uses this inside when) is very close to what you're doing:

var ref = function(value) {
   if (value && isFunction(value.then)) {
      // Then this is promise
   }

Solution 3:

@kayakDave, thanks for guiding to right place.

angular $q

when(value, [successCallback], [errorCallback], [progressCallback]);
            Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. 
            This is useful when you are dealing with an object that might  or might not be a promise, 
            or if the promise comes from a source that can't be trusted.
$q.when(value).then(function (data) {
//this helps me to bind data from $resource or $http or object
}

check this fiddle