zoukankan      html  css  js  c++  java
  • js按顺序执行多个异步函数

    今天跟同事吃饭,无意间谈到了一个技术问题。

    假如有多个异步函数,按照某个顺序执行异步函数,结果依然按照此顺序返回。

    emmm...,按照自己的理解,随意写了一个方法。

    主要用到Promise方法,话不多说,直接上代码:

    1. 定义异步函数p1、p2和p3。

     1     var p1 = function (){
     2         return new Promise((resolve, reject) => {
     3             setTimeout(() => {
     4                 resolve('p1')
     5             }, 1000);
     6         })
     7     }
     8     var p2 = function (){
     9         return new Promise((resolve, reject) => {
    10             setTimeout(() => {
    11                 resolve('p2')
    12             }, 500);
    13         })
    14     }
    15     var p3 = function (){
    16         return new Promise((resolve, reject) => {
    17             setTimeout(() => {
    18                 resolve('p3')
    19             }, 100);
    20         })
    21     }

    2. 将异步函数,按照自己定义的顺序,放到一个数组里

    1 var fnArr = [p2, p1, p3];

    3. 定义函数

     1 var run = function (arr, start = 0){
     2      if(start > arr.length || start < 0) return; // 参数start不能超过    arr.length,不能为负数
     3      var next = function (i){
     4          if(i < arr.length){
     5               var fn = arr[i];
     6               fn().then(res => {
     7                   console.log(res);
     8                   i++;
     9                   next(i)
    10               })
    11           }
    12       }
    13       next(start)
    14  }
    run(fnArr); // 执行方法

    4. 输出结果,如图:

    综上所述。

    如果文章中存在错误的地方,麻烦请大家在评论中指正,以免误人子弟,谢谢!
  • 相关阅读:
    mpeg2 ts流PAT,PMT,SDT的定义
    机顶盒和TV的连接 ---色差分量线(YPbPr)、AV线(三色线)
    how DVB SI EIT section mapping into transport stream packet?
    cocos2d 创建工程bat文件
    cocos2d 碰撞检测
    cocos2d 播放音乐
    cocos2d 显示中文(使用bmpfont generator这个工具)
    cocos init
    cocos2d 特效, effect
    cococ2d 进度条
  • 原文地址:https://www.cnblogs.com/zhaoyongblog/p/12869497.html
Copyright © 2011-2022 走看看