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 getElementsByClassName函数
Apr 01 Javascript
JavaScript 页面编码与浏览器类型判断代码
Jun 03 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
Apr 01 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
Apr 20 Javascript
JavaScript中实现继承的三种方式和实例
Jan 29 Javascript
JS实现自定义简单网页软键盘效果代码
Nov 05 Javascript
ThinkJS中如何使用MongoDB的CURD操作
Dec 13 Javascript
JavaScript瀑布流布局实现代码
May 06 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
Nov 30 Javascript
浅谈从React渲染流程分析Diff算法
Sep 08 Javascript
vue如何安装使用Quill富文本编辑器
Sep 21 Javascript
JavaScript find()方法及返回数据实例
Apr 30 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面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
PHP中使用BigMap实例
2015/03/30 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
Javascript事件实例详解
2013/11/06 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
vue组件实现文字居中对齐的方法
2017/08/23 Javascript
js读取本地文件的实例
2017/12/22 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
python中zip和unzip数据的方法
2015/05/27 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
Python 忽略文件名编码的方法
2020/08/01 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
银行柜员应聘推荐信范文
2013/11/24 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
致全体运动员广播稿
2014/02/01 职场文书
小学教师办公室制度
2014/02/03 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
质量保证书格式
2015/02/27 职场文书
2015年教师节慰问信
2015/03/23 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python