js ajax 递归,js利用递归与promise 按顺序请求数据的方法

本文介绍了如何使用JavaScript的递归和Promise来确保异步请求按照特定顺序执行。通过设置一个计数器并结合递归调用,即使在请求失败或无数据的情况下,也能保证请求按照tabBar的顺序进行。示例代码展示了如何实现这一功能,并在最后给出了实际运行的结果。
摘要由CSDN通过智能技术生成

问题:项目中有一个需求,一个tabBar下面如果没有内容就不让该tabBar显示,当然至于有没有内容,需要我们通过请求的来判断,但是由于请求是异步的,如何让请求按照tabBar的顺序进行?

方案:我们可以将promise变成下一个请求,可以利用递归来实现

实施:

//定义初始数据 requestlist就像tabBar列表

let requestlist = [1, 2, 3, 4, 5, 6, 7,8,9];

//每个tabBar的返回数据使用reslist装起来

let reslist = [];

function startapi() {

//定义counts,用来收集请求的次数,(也可以用reslist的length进行判断)

let counts = 0;

return function apirequest() {

let arg =arguments[0]

let a = new Promise((res, rej) => {

//setTimeout模拟请求到接收的时间需要5秒钟

setTimeout(function () {

res('成功返回数据');

},100)

})

//无论成功或者失败都要进行下一次,以免阻塞,成功请求的末尾有s标志,失败的末尾有f标志

a.then(() => {

counts++;

if (counts > requestlist.length) {

return;

}

console.log(counts)

//1,假设当前请求出错的时候我们认为这不合法,假设此时counts为3

if(counts==3){

throw new Error('第三个失败')

}

//2,假设当前请求下没有数据的时候我们认为不合法 ,假设此时counts为4

if(counts==4){

reslist.push(arg + 'f');

}

if(counts!=4){

reslist.push(arg + 's');

}

apirequest(requestlist[counts])

console.log(reslist)

}).catch(err => {

reslist.push(arg + 'f');

//递归调用

apirequest(requestlist[counts])

console.log(err)

})

}

}

let newapiget = startapi();

newapiget(requestlist[0])

最终我们打印结果得到:

b0c306f6a4254f83248ca06d34adef24.png

可以看到第三个和第四个结尾为f

总结

以上所述是小编给大家介绍的js利用递归与promise 按顺序请求数据的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值