AngularJS : 节流承诺 resolve/reject
AngularJS : throttle promise resolve/reject
我希望 ajax 请求花费最少的时间(例如 250 毫秒)。
动机是为了改善用户体验:当请求开始时,会为用户显示一个进度条,并在请求完成时删除。如果响应完成时间低于 100 毫秒,则用户会在屏幕上体验到模糊的变化,看起来很卡。
我的解决方案是存储请求开始的时间,并在响应时使用 $timeout 在“250 毫秒减去响应时间”后删除进度指示器。
然而,这感觉像是一个次优的解决方案,甚至可能是一个不应该以这种方式解决的问题。
有没有更好的模式来解决这个问题?
您可以通过使用 $q.all
并为其提供两个承诺来引入最小延迟:
- $http
- $超时
$q.all
的行为是等到传递给它的所有承诺都已解决,然后再继续 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
});
});
我希望 ajax 请求花费最少的时间(例如 250 毫秒)。
动机是为了改善用户体验:当请求开始时,会为用户显示一个进度条,并在请求完成时删除。如果响应完成时间低于 100 毫秒,则用户会在屏幕上体验到模糊的变化,看起来很卡。
我的解决方案是存储请求开始的时间,并在响应时使用 $timeout 在“250 毫秒减去响应时间”后删除进度指示器。
然而,这感觉像是一个次优的解决方案,甚至可能是一个不应该以这种方式解决的问题。
有没有更好的模式来解决这个问题?
您可以通过使用 $q.all
并为其提供两个承诺来引入最小延迟:
- $http
- $超时
$q.all
的行为是等到传递给它的所有承诺都已解决,然后再继续 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
});
});