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 相关文章推荐
DOM精简教程
Oct 03 Javascript
彻底搞懂JS无缝滚动代码
Jan 03 Javascript
密码框显示提示文字jquery示例
Aug 29 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
Nov 13 Javascript
JavaScript编程学习技巧汇总
Feb 21 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
May 24 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
Jan 20 Javascript
详解微信小程序之一键复制到剪切板
Apr 24 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
Jun 12 Javascript
vue中使用vue-print.js实现多页打印
Mar 05 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
Apr 28 Javascript
jQuery 添加元素和删除元素的方法
Jul 15 jQuery
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的无限分类实现想法~
2007/01/02 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
Python接口自动化判断元素原理解析
2020/02/24 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
家具厂厂长岗位职责
2014/01/01 职场文书
施工安全生产承诺书
2014/05/23 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
Django实现聊天机器人
2021/05/31 Python
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android