Question1:
有一个url数组
var urls = ['/a', '/b', '/c',...]
要求依次请求这几个url, 要求是 第一个请求完了才发第二个请求,第二个完了才发第三个请求
如此依次。
function reqst(index){ var ajaxObj = new XMLHttpRequest(); ajaxObj.open('get',urls[index]); ajaxObj.send(); ajaxObj.onreadystatechange = function () { if (ajaxObj.readyState==4&&ajaxObj.status==200) { console.log(urls[index]+'请求成功'); if(index<len-1){ reqst(index++); }else{ console.log('url数组中的url全部请求完成'); } } } } var urls = ['/a', '/b', '/c'] var len = urls.length; reqst(0);
Question2:
定义这样一个函数
function repeat(func, times, wait) {
}
参数分别是需要 repeat的函数, repeat的次数,每次repeat的间隔
使用方式如下
调用这个函数能返回一个新函数。
比如传入的是alert, 执行10次,间隔5秒
var repeatedFun = repeat(alert, 10, 5000);
调用返回的这个新函数,如:
repeatedFun("hellworld");
会alert十次 helloworld
有三种解决思路:
(1)sleep(n)
function repeat(func, times, wait) { return function(str){ for(var i=0;i<times;i++){ func(str); sleep(wait); } } } function sleep(n){ var start=new Date().getTime(); console.log(start); while(true){ var time=new Date().getTime(); if(time-start>n){ break; } } } var repeatedFun = repeat(alert, 3, 5000); repeatedFun("hellworld");
(2) setInterval
function repeat(func, times, wait) { return function f(str){ var t; var flag = 0; var interval = setInterval(function(){ flag++; if(flag === times){ clearInterval(interval); } func(str); }, wait); } } var repeatedFun = repeat(alert, 10, 5000); repeatedFun("hellworld");
(3)setTimeout,利用回调实现
function repeat(func, times, wait) { return function f(str){ var flag = 0; func(str); var interval = setTimeout(function(){ flag++; if(flag === times){ clearInterval(interval); } f(str); }, wait); } } var repeatedFun = repeat(alert, 10, 5000); repeatedFun("hellworld");