zoukankan      html  css  js  c++  java
  • Promise数组的串行执行

    Promise数组的串行执行

    利用递归的方式

      let promises = []; // 初始化promise数组
    
      for (let i = 0; i < 5; i++) {
        promises.push(
          new Promise((resolve, reject) => {
            setTimeout(() => {
              resolve(i);
            }, 1000 * (i + 1));
          })
        );
      }
    
      // 递归方式处理
      function serial(promises) {
        const maxCount = promises.length;
        let count = 0;
    
        function next(promise) {
          if (count >= maxCount) return;
          promise.then(res => {
            count++;
            next(promises[count]);
          })
        }
        next(promises[count]);
      };
    
      serial(promises);	
    

    利用ES8语法糖 async/await

      // 利用async/await进行串行操作
      function asyncFn(promises) {
        promises.forEach(async promise => {
          let res = await promise;
        });
      }
    
      asyncFn(promises);
    

    利用Generator函数

      // 利用Generator
      function serial(promises) {
        const maxCount = promises.length;
        let count = 0;
      
        function* gen (promise) {
          let y = yield promise;
        }
    
        function next(promise) {
          if (count >= maxCount) return;
          const res = gen(promise).next();
          res.value.then((val) => {
            count++;
            next(promises[count]);
          });
        }
        next(promises[0]);
      }
    
      serial(promises);
    
  • 相关阅读:
    编译JDK12
    Hexo Next背景动画Canvas_nest:true设置无效
    素数
    Linux 命令行样式
    四种排序算法实现
    Java中的简单容器
    一个关于2的次方问题
    LeetCode--20.有效的括号
    Java中的注释
    关于Metasploitable的测试
  • 原文地址:https://www.cnblogs.com/chenfengami/p/14084659.html
Copyright © 2011-2022 走看看