JS多个异步请求 按顺序执行next实现解析


Posted in Javascript onSeptember 16, 2019

在js里面,偶尔会遇见需要多个异步按照顺序执行请求,又不想多层嵌套,,这里和promise.all的区别在于,promise或者Jquery里面的$.when 是同时发送多个请求,一起返回,发出去的顺序是一起;这里是按照顺序发请求

首先创建一个迭代器,接收任意多个函数参数

function nextRegister(){
      var args = arguments;
      var count = 0;
      var comm = {};
      function nextTime(){
        count++;
        if(count < args.length){
          if(args[count] && Object.prototype.toString.call(args[count]) == '[object Function]'){
            args[count](comm,nextTime);
          }
        }
      }
      if(args[count] && Object.prototype.toString.call(args[count]) == '[object Function]'){
        args[count](comm,nextTime);
      } 
    } 

创建多个异步的函数,注入到迭代器中

/*
     comm:多个函数,公用的变量
     next:调用下一个函数
     * */
    function fn1(comm,next){
      console.log('1');
      comm.age = 20;
      next();
    }
    function fn2(comm,next){
      next();
      console.log('2');
      console.log(comm.age);
    }
    function fn3(comm,next){
      console.log('3');
    }
//开始执行迭代
nextRegister(fn1,fn2,fn3);

在这里,fn1-fn3函数中,做异步操作,知道在异步成功的时候调用next()就可以继续执行下一个函数,同时可以将前面函数返回的结果,绑定在comm上,带到下一个函数中

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript修改css样式style
Apr 15 Javascript
js判断是否为数组的函数: isArray()
Oct 30 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
Mar 26 Javascript
jquery控制左右箭头滚动图片列表的实例
May 20 Javascript
JS调用页面表格导出excel示例代码
Mar 18 Javascript
js图片预加载示例
Apr 30 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
Nov 07 Javascript
jQuery 选择同时包含两个class的元素的实现方法
Jun 01 Javascript
AngularJS基础 ng-srcset 指令简单示例
Aug 03 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 Javascript
10个最优秀的Node.js MVC框架
Aug 24 Javascript
jQuery获取复选框选中的当前行的某个字段的值
Sep 15 jQuery
基于layui框架响应式布局的一些使用详解
Sep 16 #Javascript
Layui点击图片弹框预览的实现方法
Sep 16 #Javascript
layuiAdmin循环遍历展示商品图片列表的方法
Sep 16 #Javascript
layui异步加载table表中某一列数据的例子
Sep 16 #Javascript
layui.use模块外部使用其内部定义的js封装函数方法
Sep 16 #Javascript
浅谈JS中几种轻松处理'this'指向方式
Sep 16 #Javascript
使用xampp将angular项目运行在web服务器的教程
Sep 16 #Javascript
You might like
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
js中if语句的几种优化代码写法
2011/03/12 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
菊花转动的jquery加载动画效果
2018/08/19 jQuery
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
python 七种邮件内容发送方法实例
2014/04/22 Python
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python实现批量检测HTTP服务的状态
2016/10/27 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
python机器学习之神经网络实现
2018/10/13 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
详解python中index()、find()方法
2019/08/29 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
高中军训感想800字
2014/02/23 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL