检查对象是否是AngularJS中的承诺

时间:2014-04-11 03:59:41

标签: javascript angularjs

有些情况下,我需要检查一个对象是否是一个承诺,例如从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专家(还),我想知道是否有更好/推荐的方法来检查对象是否是一个承诺。谢谢!

1 个答案:

答案 0 :(得分:1)

如果承诺已经解决,您不需要知道。如果将回调传递给.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;
      });
 }
}