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 学习笔记(六)
Dec 31 Javascript
return false;和e.preventDefault();的区别
Jul 11 Javascript
jQuery 阴影插件代码分享
Jan 09 Javascript
IE中图片的onload事件无效问题和解决方法
Jun 06 Javascript
jQuery+json实现动态创建复杂表格table的方法
Oct 25 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
Dec 07 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
JS仿淘宝搜索框用户输入事件的实现
Jun 19 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
Jan 25 Javascript
Angular resolve基础用法详解
Oct 03 Javascript
微信小程序云开发 搭建一个管理小程序
May 17 Javascript
Vue的属性、方法、生命周期实例代码详解
Sep 17 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/05/07 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
解析PHP 使用curl提交json格式数据
2013/06/29 PHP
PHP系统命令函数使用分析
2013/07/05 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
Yii实现的多级联动下拉菜单
2016/07/13 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
2021/03/09 PHP
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
Base64(二进制)图片编码解析及在各种浏览器的兼容性处理
2017/02/09 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Python正则表达式使用经典实例
2016/06/21 Python
Python命令行解析模块详解
2018/02/01 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
2014年党员公开承诺书范文
2014/03/28 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
学校政风行风整改方案
2014/10/25 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
前台岗位职责
2015/02/13 职场文书
消防宣传语大全
2015/07/13 职场文书
宝塔更新Python及Flask项目的部署
2022/04/11 Python
Python函数对象与闭包函数
2022/04/13 Python