停止回调函数Javascript
Stop Callback function Javascript
用户可以选择一个月(+1月点击,-1月点击)
每次点击按所选月份的天数循环执行。
在循环中有一个从$http请求中获取数据的函数。
问题是:(示例)
-页面加载:var data = [];
时间1:用户在一月点击:
$http请求31次,回调15次。data.length = 15;
时间2:用户在二月点击。
变量初始化var data = []
16个来自上个月的回调,加上2月份的30个。
我想要一种方法来停止回调当用户点击另一个月…
这是一个基本的小提琴,以更好地理解
http://jsfiddle.net/36qp9ekL/318/
啊,好吧,对不起,小提琴错了…
我猜你的请求没有一个请求快。但是,由于angular是异步的,你不需要在next()和previous()函数中"等待",当你点击得足够快时,它们会相互重叠。然后,它将返回前几天剩余的"rest",并执行该月的后几天。你需要在这里使用承诺或者改变你的程序结构。
编辑:你需要注入$q
有承诺的例子
$scope.next = function(){
date.setDate(date.getDate() + 1);
$scope.data = [];
// disable previous and next button
$scope.loadData().then(function(allDayRequestResults) {
$scope.data = allDayRequestResults;
// enable previous and next button
}).catch(function(error) {
// handle http request error here
});
};
$scope.loadData = function(){
var promises = [];
for(var i = 1; i <= daysInMonth(); i++){
promises.push(getData(i));
}
return $q.all(promises);
};
function getData(i){
var deferred = $q.defer();
$http(<yourHttpOptions>)
.success(function(result) {
deferred.resolve(result);
})
.error(function (data, status, headers, config) {
console.log('$http-error:' + data + status + headers + config);
deferred.reject('Error occured while retrieving day '+ i);
});
return deferred.promise;
}
我同意请求1回调并在30天内响应是一个更好的解决方案,但我相信这对其他应用程序可能很有用。
没有经过测试,但显示了继续进行的方法。全局变量是我找到的解决方案,因为承诺不是跨浏览器的。
<button ng-click="load()"> Load data 1.000 times </button>
<script>
var callback = true;
var count = 0;
function ajaxRequest(i){
//AJAX REQUEST
.success(function(){
count++;
if(count == 1000){
callback = true;
count = 0;
}
});
}
$scope.load = function(){
if(callback){
callback = false;
for(var i = 0; i < 1001; i++){
ajaxRequest(i);
}
}
}
</script>
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别