如何在Angular $ http的config.timeout中使用$ q&#39的构造函数语法?

时间:2016-03-22 21:42:15

标签: javascript angularjs angular-promise angular-http

由于Promise现已正式规范,所以如何将以下代码段中的$q.defer()承诺创建转换为使用$q(function (resolve, reject) {})构造函数语法?

// Cancel any ongoing $http request so that only the most recent $http
// callback gets invoked
var canceller;
function getThing(id) {
  if (canceller) canceller.resolve();
  canceller = $q.defer();

  return $http.get('/api/things/' + id, {
    timeout: canceller.promise
  });
}

(来自$http docs的Fyi:timeout是" ...以毫秒为单位,或承诺在解决时应该中止请求。")

1 个答案:

答案 0 :(得分:1)

我会这样做:

var canceller = null;
function getThing(id) {
  if (canceller) canceller();
  return Promise.resolve($http.get('/api/things/' + id, {
    timeout: new Promise(function(resolve) {
      canceller = resolve;
    })
  }));
}

我假设您从未使用过canceller.reject,所以您可以随时保留resolve函数本身以便下次调用它。