我有一个非常大的angularjs应用程序,销售东西并有过滤器
似乎我们需要通过不稳定的联系来支持人们。
这意味着如果用户选择“二手产品”过滤器,然后他取消选择“二手产品”,则会通过$ http向服务器发出两次调用。
$http.get("reloadresults?used=true", function (response) { $scope.items = response items; }); at 12:03:04 hours
$http.get("reloadresults?used=false", function (response) { $scope.items = response items; }); at 12:03:05
现在,图像存在瓶颈或其他问题,第一次使用'used=true'
调用最后返回,然后过滤器出现问题。
我知道在angularjs中有一个$ http拦截器,根据承诺,我该如何解决这个问题?因此请求按发送顺序处理,意味着'used = true',然后才使用= false。
编辑:无法阻止线程,无法重构,只需按照首次发送的顺序获得fullfil。我觉得以后生病了。
答案 0 :(得分:0)
我不太了解你的问题,但我认为你正在寻找
int _len = txtPassword.Text.Length;
答案 1 :(得分:0)
您确实可以通过形成队列(承诺链)来确保以正确的顺序调用成功处理程序,但是在这种情况下,每次发出新请求时都会使先前的请求无效,从而更简单。 / p>
有很多方法可以实现这一目标。这是一个...
function cancelPrevious(fn) {
var reject_ = null;
return function(x) {
if(reject_) reject_(new Error('cancelled'));
return Promise.race(fn(x), new Promise(function(_, reject) {
reject_ = reject; // if reject_ is called before fn(x) settles, the returned promise will be rejected.
}));
};
}
允许你写...
var get = cancelPrevious(function(str) {
return $http.get(str);
});
...并从任意数量的事件线程发出请求:
get('reloadresults?used=true').then(function(response) {
// This function will be reached only if
// $http.get('reloadresults?used=true') fulfills
// before another get() call is made.
$scope.items = response.items;
});
...
// This call causes the then callback above to be suppressed if not already called
get('reloadresults?used=false').then(function(response) {
$scope.items = response.items;
});
注意:
cancelPrevious()
的函数中包含的副作用;一般情况下,不要包含这些副作用。