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


Posted in Javascript onAugust 30, 2019

问题:项目中有一个需求,一个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 按顺序请求数据的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript之ESC(第二类混淆)
May 06 Javascript
一个符号插入器 中用到的js代码
Sep 04 Javascript
jquery 弹出层注册页面等(asp.net后台)
Jun 17 Javascript
一个简单的js动画效果代码
Jul 20 Javascript
Js 导出table内容到Excel的简单实例
Nov 19 Javascript
JQuery EasyUI 数字格式化处理示例
May 05 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
Jan 30 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
Feb 05 Javascript
es6数组的flat(),flatMap()函数用法实例分析
Apr 18 Javascript
9个JavaScript日常开发小技巧
Oct 06 Javascript
通过JS判断网页是否为手机打开
Oct 28 Javascript
Vue-CLI 项目在pycharm中配置方法
Aug 30 #Javascript
JS实现页面跳转与刷新的方法汇总
Aug 30 #Javascript
Vue 动态组件components和v-once指令的实现
Aug 30 #Javascript
java实现单链表增删改查的实例代码详解
Aug 30 #Javascript
vuex vue简单使用知识点总结
Aug 29 #Javascript
js中的this的指向问题详解
Aug 29 #Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
Aug 29 #Javascript
You might like
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
angular动态表单制作
2018/02/23 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
win与linux系统中python requests 安装
2016/12/04 Python
Apache如何部署django项目
2017/05/21 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
2018/04/30 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
python实现图片九宫格分割
2021/03/07 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
python求绝对值的三种方法小结
2019/12/04 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
一个入门级python爬虫教程详解
2021/01/27 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
电气专业应届生求职信
2013/11/01 职场文书
出纳工作岗位责任制
2014/02/02 职场文书
四年大学自我鉴定
2014/02/17 职场文书
六查六看心得体会
2014/10/14 职场文书
优秀员工推荐材料
2014/12/20 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
nginx.conf配置文件结构小结
2022/04/08 Servers