关于循环里面的 ajax 请求异步问题

解决循环中ajax异步请求的问题
这篇博客探讨了在前端开发中遇到的循环内异步ajax请求导致的界面渲染问题。作者通过分析问题,提供了两种解决方案:1) 使用async/await,虽然在低版本浏览器的兼容性不佳;2) 采用递归方法,虽然代码可能较为复杂。文章旨在分享解决此类问题的思路和实践经验。

大晚上在工作中遇到过一次界面渲染不上的问题,排查了下是循环的时候请求接口异步,大晚上的没什么灵感,一时之间有点懵,第二天仔细想了想,贴一些解决的方法和相关思路出来。

问题

代码

//init
	function init() {
        for (let i in list) {
          console.log(`------------${i}------------`);
          $.ajax({
            url: url + list[i].id,
            method: "get",
            dataType: "jsonp",
            success: function(res) {
              console.log(res);
            },
            error: function(err) {
              console.log(err);
            }
          });
        }
      }

代码的结果
在这里插入图片描述
我想要的结果
在这里插入图片描述

方法

1.async/await

 	async function init() {
        for (let i in list) {
          console.log(`------------${i}------------`);
          await $.ajax({
            url: url + list[i].id,
            method: "get",
            dataType: "jsonp",
            success: function(res) {
              console.log(res);
            },
            error: function(err) {
              console.log(err);
            }
          });
        }
      }

简洁直观,明了易懂,就是async在低版本浏览器的兼容性不太友好

2.递归

	let i = 0;
      function init() {
        let recursion = i => {
          console.log(`------------${i}------------`);
          $.ajax({
            url: url + list[i].id,
            method: "get",
            dataType: "jsonp",
            success: function(res) {
              console.log(res);
              if (i < list.length-1) {
                recursion(++i);
              }
            },
            error: function(err) {
              console.log(err);
            }
          });
        };
        i < list.length && recursion(i);
      }

兼容性没啥问题,就是感觉上有点多

没想到其他的好办法,网上也找了些,思路上也差不多。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值