Question1:
有一個url數組ajax
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的間隔
使用方式以下
調用這個函數能返回一個新函數。url
好比傳入的是alert, 執行10次,間隔5秒
var repeatedFun = repeat(alert, 10, 5000);
調用返回的這個新函數,如: spa
repeatedFun("hellworld");code
會alert十次 helloworldblog
有三種解決思路:get
(1)sleep(n)it
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) setIntervalio
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");