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的trim方法
Oct 09 Javascript
jQuery 获取兄弟元素的几种不错方法
May 23 Javascript
chrome下img加载对height()的影响示例探讨
May 26 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
Jun 23 Javascript
React.js入门学习第一篇
Mar 30 Javascript
jQuery实现的自定义滚动条实例详解
Sep 20 Javascript
jQuery、zepto、js常用小技巧
Feb 12 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
Aug 28 Javascript
微信小程序 动画的简单实例
Oct 12 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
Oct 23 Javascript
微信小程序实现自动定位功能
Oct 31 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 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实现webservice实例
2014/11/06 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
Python中返回字典键的值的values()方法使用
2015/05/22 Python
深入浅析Python字符编码
2015/11/12 Python
使用python存储网页上的图片实例
2018/05/22 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
python3正则模块re的使用方法详解
2020/02/11 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
Pycharm新手使用教程(图文详解)
2020/09/17 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
小学生安全保证书
2014/02/01 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
广告创意求职信
2014/03/17 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
大学生党员自我评价
2015/03/04 职场文书
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL