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 相关文章推荐
用jquery与css打造个性化的单选框和复选框
Oct 20 Javascript
Jquery插件之打造自定义的select标签
Nov 30 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
Aug 24 Javascript
jQuery实现的支持IE的html滑动条
Mar 16 Javascript
JavaScript中实现map功能代码分享
Jun 11 Javascript
JavaScript中的原始值和复杂值
Jan 07 Javascript
jQuery获取checkbox选中的值
Jan 28 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
Oct 31 Javascript
js绑定事件和解绑事件
Apr 27 Javascript
JavaScript基于数组实现的栈与队列操作示例
Dec 22 Javascript
javascript获取元素的计算样式
May 24 Javascript
vue相关配置文件详解及多环境配置详细步骤
May 19 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和ACCESS写聊天室(十)
2006/10/09 PHP
ADODB类使用
2006/11/25 PHP
PHP 验证码的实现代码
2011/07/17 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
Javascript 跨域访问解决方案
2009/02/14 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
JS中作用域和变量提升(hoisting)的深入理解
2016/10/31 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
python多维数组切片方法
2018/04/13 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
python做接口测试的必要性
2019/11/20 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
办公室保洁员岗位职责
2013/12/02 职场文书
北京奥运会主题口号
2014/06/13 职场文书
个人职业及收入证明
2014/10/13 职场文书
学期个人工作总结
2015/02/13 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书
2016年中秋节慰问信
2015/12/01 职场文书