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

后端 未结 4 1572
情书的邮戳
情书的邮戳 2020-12-14 14:33

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 metho

相关标签:
4条回答
  • 2020-12-14 14:56

    The $q.when() answer seems like the best answer for most use cases, I used instanceof for mine.

        if(buttonData instanceof $q) {
            buttonData.then(function(actions) {
                $scope.buttonActions = actions;
            });
        } else {
            $scope.button = buttonData;
        }
    

    Alternatively, the following IF worked as well, but I ended up going with the above solution.

    if(Object.getPrototypeOf(buttonData) === $q.prototype) {

    0 讨论(0)
  • 2020-12-14 14:58

    @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

    0 讨论(0)
  • 2020-12-14 15:05

    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
       }
    
    0 讨论(0)
  • 2020-12-14 15:09

    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.

    0 讨论(0)
提交回复
热议问题