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

如何控制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日

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格