m0_57965808 2022-04-09 19:13 采纳率: 90.9%
浏览 115
已结题

如何控制JS代码中的执行顺序

代码如下:

<html>
<head>
<title>shuju</title>
<script>
function fn1(){
var ajax = new XMLHttpRequest()
ajax.open('GET','http://127.0.0.1:5000',true) 
ajax.send()
ajax.onreadystatechange=()=>{
        if(ajax.readyState === 4 && ajax.status === 200){
                datalists=ajax.response
                console.log('你好')
                return datalists
               DataList=JSON.parse(ajax.response)
               
                
        }  
}
}
</script>
</head>
<body>
<script type="text/javascript"> 
var shujuju=fn1()
console.log(shujuju)
</script>
</body>
</html>

img


我想等datalists的值出来之后再执行第二段JS函数。请问有什么办法么?

  • 写回答

2条回答 默认 最新

  • 林一怂儿 前端领域新星创作者 2022-04-09 19:49
    关注

    可以参考下,没有验证浏览器的适用性。

    
    <html>
    
    <head>
      <title>shuju</title>
      <script>
        // function fn1() {
        //   var ajax = new XMLHttpRequest()
        //   ajax.open('GET', 'http://127.0.0.1:5000', true)
        //   ajax.send()
        //   ajax.onreadystatechange = () => {
        //     if (ajax.readyState === 4 && ajax.status === 200) {
        //       datalists = ajax.response
        //       console.log('你好')
        //       return datalists
        //       DataList = JSON.parse(ajax.response)
        //     }
        //   }
        // }
    
        // 例一 callback 形式
        // function fn1(callback) {
        //   var ajax = new XMLHttpRequest()
        //   ajax.open('GET', 'http://127.0.0.1:5000', true)
        //   ajax.send()
        //   ajax.onreadystatechange = () => {
        //     if (ajax.readyState === 4 && ajax.status === 200) {
        //       datalists = ajax.response
        //       console.log('你好')
        //       // return datalists
        //       callback(datalists);
        //       DataList = JSON.parse(ajax.response)
        //     }
        //   }
        // }
    
        // 例二 Promise 的形式
        function fn1() {
          return new Promise((resolve) => {
            var ajax = new XMLHttpRequest()
            ajax.open('GET', 'http://127.0.0.1:5000', true)
            ajax.send()
            ajax.onreadystatechange = () => {
              if (ajax.readyState === 4 && ajax.status === 200) {
                datalists = ajax.response
                console.log('你好')
                // return datalists
                resolve(datalists);
                DataList = JSON.parse(ajax.response)
              }
            }
          })
        }
      </script>
    </head>
    
    <body>
      <script type="text/javascript">
        // var shujuju = fn1()
        // console.log(shujuju)
    
        // 例一
        // fn1((r) => {
        //   console.log(r);
        // })
    
    
        // 例二
        fn1().then(r => {
          console.log(r);
        })
      </script>
    </body>
    
    </html>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月18日
  • 已采纳回答 4月10日
  • 创建了问题 4月9日

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因