赵小帅go 2021-07-03 16:08 采纳率: 50%
浏览 198
已结题

js for循环 异步

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

<script type="text/javascript">

    function queue(num){

        return new Promise(resolve=>{
            resolve();
        }).then(
            value=>{
                let promise=Promise.resolve();
                num.map(v=>{
                    promise=promise.then(_=>{
                        return new Promise(resolve=>{

                            //异步操作
                            setTimeout(() => {
                                console.log(v);
                                resolve();
                            }, 1000);

                        })
                    })
                })
            }
        )
    }

    new Promise(resolve=>{
        resolve();
    }).then(
        _=>{
            let num=[1,2,3,4,5];
            return Promise.resolve(num);
        }
    ).then(
        value=>{
            queue(value);
        }
    ).then(
        value=>{
            console.log("完成");
        }
    )


</script>   

</body>
</html>

得到的结果:
img

问题:
如何实现在打印出1~5之后,再打印"完成"?

  • 写回答

3条回答 默认 最新

  • 带酒书生 2021-07-03 16:18
    关注
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
    <script type="text/javascript">
        function queue(num){
            return new Promise(resolve=>{
                resolve();
            }).then(
                value=>{
                    let promise=Promise.resolve();
                    num.map(v=>{
                        promise=promise.then(_=>{
                            return new Promise(resolve=>{
                                //异步操作
                                setTimeout(() => {
                                    console.log(v);
              if(v>=5)console.log("完成");
                                    resolve();
                                }, 1000);
                            })
                        })
                    })
                }
            )
        }
        new Promise(resolve=>{
            resolve();
        }).then(
            _=>{
                let num=[1,2,3,4,5];
                return Promise.resolve(num);
            }
        ).then(
            value=>{
                queue(value);
            }
        ).then(
            value=>{
                console.log("完成");
            }
        )
     
    </script>   
    </body>
    </html>
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?