取消Angular中的先前请求

时间:2016-06-23 15:41:03

标签: javascript angularjs deferred

使用Angular我想一次只发送一个数据请求。我想在发送新请求时跳过上一个请求。为了实现它,我在我的控制器中为请求承诺创建了全局变量:

var searchRequest = null;

然后我定义了一个发送请求的函数:

function sendSearchRequest() {
   if (searchRequest != null)
      searchRequest.reject('new request');
   searchRequest = $q.defer();
   dataService.search(buildQuery())
      .then(function (result) { searchRequest.resolve(result); })
      .catch(function (e) { searchRequest.reject(e); });
   return searchRequest.promise;
}

它是我的数据服务和更高级别之间的代理功能,它应该取消先前的请求(如果有的话)并发送新的请求。然后我只需按如下方式调用此函数:

function search() {
   sendSearchRequest()
      .then(function (result) { ... })
      .catch(function (e) { ... });
};

我的查询在对search()的两次调用之间发生更改,但是我获取了第一次查询的结果。我究竟做错了什么?为什么我不能跳过第一个请求并从第二个请求中获取数据?

0 个答案:

没有答案