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);
    
  • 相关阅读:
    CSS选择器之伪类选择器(元素)
    CSS选择器之基本选择器+属性选择器
    bugku 点击1000000次
    bugku web 5
    bugku 矛盾 30
    bugku 域名解析题 50
    bugku 好多压缩包
    六子冲 模拟棋盘
    poj3126 Prime Path(c语言)
    poj1426 Find The Multiple(c语言巧解)
  • 原文地址:https://www.cnblogs.com/chenfengami/p/14084659.html
Copyright © 2011-2022 走看看