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

作者:wangnima666 时间:2024-06-05 09:34:58 

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

 最终我们打印结果得到:

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

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

总结

以上所述是小编给大家介绍的js利用递归与promise 按顺序请求数据的方法,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://www.cnblogs.com/tony-stark/archive/2019/08/29/11431655.html

标签:js,promise,请求数据
0
投稿

猜你喜欢

  • 如何把IP表存到SQL数据库里去?

    2009-11-02 20:21:00
  • 详解Mysql主从同步配置实战

    2024-01-14 16:36:13
  • 详解pytorch的多GPU训练的两种方式

    2023-08-04 09:58:29
  • python指定路径斜杠与反斜杠遇到的问题

    2023-03-18 20:47:27
  • 浅析Banner构成与创意设计

    2009-11-28 16:25:00
  • kettle 入门使用教程(最新版)

    2023-04-12 21:28:12
  • oracle 存储过程加密的方法

    2024-01-13 12:49:10
  • 存储过程的输出参数,返回值与结果集

    2024-01-17 21:44:30
  • Python 异步之推导式示例详解

    2021-05-16 17:31:08
  • MySQL错误Forcing close of thread的两种解决方法

    2024-01-25 15:24:44
  • numpy.ndarray 实现对特定行或列取值

    2022-05-14 09:17:24
  • 小议sqlserver数据库主键选取策略

    2024-01-25 15:03:52
  • Vue中使用vee-validate表单验证的方法

    2024-06-05 15:29:04
  • Python docx库代码演示

    2021-12-11 12:18:02
  • 利用Python将多张图片合成视频的实现

    2022-09-16 07:10:26
  • 教你如何使用Python实现二叉树结构及三种遍历

    2021-04-30 14:08:00
  • Python Numpy之linspace用法说明

    2021-10-17 10:49:55
  • 最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程

    2022-09-24 01:38:47
  • SQL2005查看死锁存储过程sp_who_lock

    2024-01-12 20:34:13
  • 使用Python自动生成HTML的方法示例

    2022-08-12 12:12:18
  • asp之家 网络编程 m.aspxhome.com