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