AngularJS:油门承诺解决/拒绝

时间:2015-01-31 23:11:41

标签: angularjs promise angular-promise

我希望ajax请求花费最少的时间(例如,250ms)。

动机是改善用户体验:当请求开始时,会为用户显示进度条,并在请求完成时将其删除。如果响应完成时间小于100毫秒,则用户会在屏幕上遇到模糊的变化,看起来很笨拙。

我的解决方案是存储请求开始的时间,并在响应时使用$ timeout在“250ms减去响应时间”之后删除进度指示器。

然而,这感觉就像是次优解决方案,甚至可能是一个不应该以这种方式解决的问题。

是否有更好的模式来解决这个问题?

1 个答案:

答案 0 :(得分:3)

您可以使用$q.all并提供两个承诺来引入最小延迟:

  1. $ HTTP
  2. $超时
  3. $q.all的行为是等到所有传递给它的promise都被解决后再继续使用then处理程序。

    app.controller('ctrl', function($http, $timeout, $q) {
        var promise1 = $http({method:'GET', url:'api/users' });
        var promise2 = $timeout(function() {}, 250);
        $q.all([promise1, promise2]).then(function(result) {
              // both promises resolved
        });
    });