我有一个工厂,它正在返回ngResource
.factory('web'... {
return $resource(URL, null, {
create: {method: 'POST'}
}
}
然后我有一个服务,只有在URL参数更改或者我存储响应的variable
为空时才需要从上面的工厂获取数据。
var query = Web.get(param);
query.$promise.then(function(res) {
variable = res;
}
return variable
然后我调用上面的服务来获取一些数据,如果variable
为空,则发出请求,否则返回变量。
问题是因为请求我没有得到任何数据,我该如何解决这个问题?另外,我想得到response
的价值而不是承诺。
更新:
为什么我不需要承诺。
有一次,我将获得所需的所有数据,因此我无需在Web
上提出请求。因此,从一组对象中,用户将能够选择一个对象,然后上面的variable
将具有所选object
的值。
现在我的函数将返回一个对象而不是一个promise,我想我可以检查返回类型,但我希望还有另一种方式。
答案 0 :(得分:1)
当您的函数返回时,承诺尚未解决,因此您始终会返回undefined
。
您应该将承诺返回给您的调用函数,让它等待承诺解决或处理任何错误。
var query = Web.get(param);
return query.$promise;
问题在于,由于请求我没有获得任何数据,我该如何解决这个问题?我也希望得到回应的价值而不是承诺。
除非我非常误,否则你不能。
根据更新的问题更新
你仍然需要承诺做你想做的事。把它全部包起来并不困难。
function getData(param)
{
va deferred = $q.defer();
if (variable){
// Already got what we need
deferred.resolve(variable);
}
else
{
// Lookup the data
var query = Web.get(param);
query.$promise.then(function(res) {
variable = res; // Save for later
deferred.resolve(variable);
},
function(err){
deffered.reject(err);
});
}
return deferred.promise;
}