模拟SSE流式输出的四种方法

发布于:2025-04-20 ⋅ 阅读:(9) ⋅ 点赞:(0)
  • 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>


网站公告

今日签到

点亮在社区的每一天
去签到