- async await+ for循环+delay函数
- setinterval+if判定
- 递归调用
- 链式调用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
//async await delay for循环 方法一
let str = 'hello world';
async function mySSE(str){
// let strArr = str.split('');
for(let i =0;i<str.length;i++){
await delay(1500,str[i]).then(res=>console.log(res))
}
}
function delay(timer,data){
return new Promise((resolve,reject)=>{
setTimeout(()=>resolve(data),timer)
})
}
mySSE(str)
// setinterval 方法二 流失输出
function run(str) {
let index = 0;
let n = setInterval(() => {
if (index < str.length) {
console.log(str[index])
index++
} else {
clearInterval(n)
}
}, 1500)
}
let str = 'hello world'
run(str)
// 递归调用 方法三
function delay(timer, data) {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(data), timer)
})
}
function run(str,count) {
if (count == str.length) return
return delay(1500,str[count]).then(res=>{console.log(res); return run(str,count+1)})
}
let str = 'hello world'
run(str,0)
// 链式调用 方法四
function delay(timer, data) {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(data), timer)
})
}
function run(str,count) {
return delay(1500,str[count]).then(res=>{console.log(res);return delay(1500,str[count+1]).then(res=>{console.log(res)})}) //...
}
let str = 'hello world'
run(str,0)
</script>
</body>
</html>