视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
js利用递归与promise 按顺序请求数据的方法
2020-11-27 21:51:41 责编:小采
文档


问题:项目中有一个需求,一个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])

 最终我们打印结果得到:

 

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

总结

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

下载本文
显示全文
专题