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 相关文章推荐
JS实现跟随鼠标闪烁转动色块的方法
Feb 26 Javascript
JS时间特效最常用的三款
Aug 19 Javascript
js实现新年倒计时效果
Dec 10 Javascript
探讨JavaScript标签位置的存放与功能有无关系
Jan 15 Javascript
原生js编写autoComplete插件
Apr 13 Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 Javascript
canvas实现流星雨的背景效果
Jan 13 Javascript
微信小程序商城项目之购物数量加减(3)
Apr 17 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
使用JavaScript实现表格编辑器(实例讲解)
Aug 02 Javascript
玩转Koa之核心原理分析
Dec 29 Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 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中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
php创建多级目录的方法
2015/03/24 PHP
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
Vue项目分环境打包的实现步骤
2018/04/02 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
打包发布Python模块的方法详解
2016/09/18 Python
Python测试人员需要掌握的知识
2018/02/08 Python
python中实现字符串翻转的方法
2018/07/11 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
python第三方库学习笔记
2020/02/07 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
Python datetime 如何处理时区信息
2020/09/02 Python
python搜索算法原理及实例讲解
2020/11/18 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
css3截图_动力节点Java学院整理
2017/07/11 HTML / CSS
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
Servlet面试题库
2015/07/18 面试题
医院办公室主任职责
2013/12/29 职场文书
公司担保书格式范文
2014/05/12 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
2014年招商工作总结
2014/11/22 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
《分数的意义》教学反思
2016/02/20 职场文书