>我有一个数组。
var a = [1,2,3,4,5,6,7,8,9,10];
for (var i = 0; i < a.length - 1; i++) {
console.log(a);
};
为了创建此循环的超时,我需要做什么?假设我想延迟 1 秒。
原因是因为我想从网站使用 http get(),我不想淹没它们,但是我想确保在发出下一个响应之前得到回复。但是,如果响应速度快于 1 秒,我想至少等待一秒钟。
我试过$interval,有时我会在 4 秒内从服务器收到响应,并且在响应返回之前发出更多问题。
我猜在触发下一个事件之前我需要承诺吗? 但是计时器也是?
请帮忙。
尝试 $q.serial(AngularJS 中默认不包含的函数),该函数在此处实现和解释。
var createTask = function (i) {
return function (delay) {
var start, end, nextRequestNeedsDelay;
var deferred = $q.defer();
if (delay) {
$timeout(function() {
start = Date.now();
$http.get("/foo")
.then(function () {
console.log(i);
end = Date.now();
nextRequestNeedsDelay = end - start < 1000;
deferred.resolve(nextRequestNeedsDelay);
});
}, 1);
} else {
start = Date.now();
$http.get("/foo")
.then(function () {
console.log(i);
end = Date.now();
nextRequestNeedsDelay = end - start < 1000;
deferred.resolve(nextRequestNeedsDelay);
});
}
return deferred.promise;
};
};
var a = [1,2,3,4,5,6,7,8,9,10];
var tasks = [];
for (var i = 0; i < a.length - 1; i++) {
tasks.push(createTask(i));
};
$q.serial(tasks);
您可以使用角度的承诺概念。承诺提供同步设施。
我通过给出演示示例向您展示
var app = angular.module("myApp",[ ]);
app.controller("ctrl",function($scope,$q,$timeout){
var task1 = $q.defer();
task1.promice.then(function(value){
// write a code here for your task 1 success
} ,function(value){
// write a code here for your task 1 error
});
var task2 = $q.defer();
task2.promice.then(function(value){
// write a code here for your task 2 success
} ,function(value){
// write a code here for your task 2 error
});
$q.all([task1.prpmice,task2.promice])
.then(function(){
// write a code which is executed when both the task are completed
} ,function(){
// write a code which is executed when some of the task are rejected
});
}
上面的代码将帮助您理解角度的概念