js同步与异步问题

js会出现异步问题场景

  1. 延时操作
  2. 数据请求同异步
  3. promise 异步
  4. 回调涵数(最常见多内置涵数支持接收回调涵数来异步代码 )
  5. 事件监听 如,click事件等异步
  6. 订阅与发布

今天遇到的问题是,请求数据时间太长,会先执行之后的代码,

初步预想的解决方法:

  1. 使用箭头涵数,使用涵数的返回值,让请求与之后的代码 同步执行
  2. 异步请求修改变成同步
  3. async/await-Promise-让异步操作同步执行
  4. 开关涵数
  5. 延时操作
标题延时操作

缺点:不知请求数据需要多长时间,之后的数据需要延迟多少时间展示,是个问题。


      function tes0t() {
        fn1();
        fn2();
        fn3();
      }

      function fn1() {
        console.log(1);
      }
      
      function fn2({
        setTimeout(function () {
          console.log(2);
        }, 1000);
      }
      
      function fn3() {
        setTimeout(function () {
          console.log(3);
        }, 0);
      }
      
      tes0t();
开关涵数

预期输出是:1,2,3,
实际输出是:1,3,2,
所以达不到想要的效果

var kai=false
      function tes0t() {
        fn1();
        fn2();
        fn3();
      }
      function fn1() {
        console.log(1);
      }
      function fn2() {
        setTimeout(function () {
          console.log(2);
          kai= true;
        }, 1000);
        //   console.log();
      }
      function fn3() {
        setTimeout(function () {
          console.log(3);
        }, 0);
      }
      tes0t();

jQuery异步请求设置为 同步请求

是否达到预期效果,不知道

$.ajaxSettings.async = false;//同步请求
 Global_MBPage.$gt(url, params, function (json) {}
 $.ajaxSettings.async = true;//异步请求 - 默认是异步

使用箭头涵数,涵数的返回值,让请求与之后的代码 同步执行

测试是可以达到预期效果,输出结果是1,2,3


      function tes0t() {
        fn1();
        fn2(1, 1, () => {fn3();});
      }
      function fn1() {
        console.log(1);
      }
      function fn2(n1, n2, n3) {
        setTimeout(function () {
          console.log(2);
          if (n3) n3.call();//返回值的设置
        }, 1000);
      }

      function fn3() {
        setTimeout(function () {
          console.log(3);
        }, 0);
      }
      tes0t();

async/await-Promise-让异步操作同步执行


function fn4(){
  return new Promise(resolve=>{
    setTimeout(function(){
      msg='等啥 '
      resolve(msg)
    },1000)
  })
}
async function aC(){
  var result = await fn4();
  console.log(result);
}

aC() // 输出为‘ 等啥 ’
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值