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日

悬赏问题

  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题