This question already has answers here:
Any way to know if a variable is an angularjs promise?
                                
                                    (4个答案)
                                
                        
                                5年前关闭。
            
                    
在某些情况下,我需要检查某个对象是否为诺言,例如从API获取初始数据时显示加载指示器,这可能需要花费几秒钟的时间。
到目前为止,我正在使用以下代码片段:

if ($scope.data.$resolved === false){
   // data is a promise as it is not resolved yet
}
else{
   // data is not a promise as it either never was or has been resolved
}


这似乎很好用,但是由于我还不是Angular专家,所以我想知道是否有更好/建议的方法来检查对象是否是一个承诺。谢谢!

最佳答案

您不需要知道诺言是否已经解决。如果将回调传递到.then,即使已解决了承诺,也会执行此代码。

似乎不明智的做法是使您的方法返回2种不同的类型。

一个承诺或直接的数据。

即使从缓存中获取数据,也总是要返回一个Promise。
将其传递到数据确实来自的.resolve

像这样:

function getData(){
 var data = getFromCache();
 if( data ) {
   var deferred = $q.defer(); //Make your own promise
   deferred.resolve(data);
   return deferred.promise;
 }else{
   return $http.get("someData.json")  //Return the promise from the `$http.get`
     .then(function(data){
        return data;
      });
 }
}

10-05 20:51
查看更多