This question already has answers here:
Any way to know if a variable is an angularjs promise?
(4个答案)
5年前关闭。
在某些情况下,我需要检查某个对象是否为诺言,例如从API获取初始数据时显示加载指示器,这可能需要花费几秒钟的时间。
到目前为止,我正在使用以下代码片段:
这似乎很好用,但是由于我还不是Angular专家,所以我想知道是否有更好/建议的方法来检查对象是否是一个承诺。谢谢!
(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;
});
}
}