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 时间间隔计算的函数(间隔天数)
Nov 15 Javascript
javascript 获取网页标题代码实例
Jan 22 Javascript
通过js来制作复选框的全选和不选效果
May 22 Javascript
JavaScript数组常用操作技巧汇总
Nov 17 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
Feb 28 Javascript
jquery滚动到顶部底部代码
Apr 20 Javascript
Bootstrap每天必学之面板
Nov 30 Javascript
jquery-mobile表单的创建方法详解
Nov 23 Javascript
jQuery之动画ajax事件(实例讲解)
Jul 18 jQuery
浅谈vue-cli 3.0.x 初体验
Apr 11 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
May 16 Javascript
vue-amap根据地址回显地图并mark的操作
Nov 03 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中实现进程间通讯
2006/10/09 PHP
我的论坛源代码(八)
2006/10/09 PHP
10款实用的PHP开源工具
2015/10/23 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
Flask框架信号用法实例分析
2018/07/24 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
销售文员的岗位职责
2013/11/20 职场文书
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python