及时从服务中返回数据

时间:2015-06-26 15:06:46

标签: angularjs

我有一个工厂,它正在返回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,我想我可以检查返回类型,但我希望还有另一种方式。

1 个答案:

答案 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;
}