【问题标题】:AngularJS : throttle promise resolve/reject [duplicate]AngularJS:节流承诺解决/拒绝[重复]
【发布时间】:2015-01-31 23:11:40
【问题描述】:

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

动机是改善用户体验:当请求开始时,会为用户显示一个进度条,并在请求完成时移除。如果响应完成时间不到 100 毫秒,那么用户会在屏幕上体验到模糊的变化,并且看起来很卡。

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

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

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

【问题讨论】:

  • 如果这是关于用户体验的问题,这可能不是正确的网站
  • 我会以完全相反的方式处理这个问题。为什么要惩罚快速连接的用户,强迫他们等待更长的时间才能看到你的进度条?为什么在进度条显示前没有 250 毫秒的超时时间?
  • 虽然这个问题是关于蓝鸟的,但问题和解决方案基本相同。

标签: angularjs promise angular-promise


【解决方案1】:

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

  1. $http
  2. $超时

$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
    });
});

【讨论】:

    猜你喜欢
    • 2020-03-07
    • 2023-03-26
    • 2016-08-03
    • 2013-06-22
    • 1970-01-01
    • 2013-09-16
    • 2021-11-02
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多