zoukankan      html  css  js  c++  java
  • promise加载队列实现

    let arr = [1,2,3];

    arr .reduce((promise,current)=>{

      return promise.then(()=>{

        return new Promise(resolve=>{

          setTimeout(()=>{

            console.log(current);

            resolve()

          },1000)

        })

      })

    },Promise.resolve())

    //总结:想要依次加载,上一个promise必须为完成状态,那么.then()里面的内容才可以继续执行,.then()之后的队列想要继续执行,那么当前.then()同样需要返回一个成功状态的promise

    队列渲染示例:

    let data = [
      {
        id:1,
        name:'jay',
        email:'jayking1314@126.com'
      },
      {
        id:2,
        name:'see',
        email:'jayking1314@126.com'
      }
    ]

    function getUser(name){
      return new Promise((resolve,reject)=>{
        let theData = null;
        for(v of data){
          if(v.name === name){
            theData = v;
            break;
          }
        }
        if(theData){
          resolve(theData);
        }
        else{
          reject('no data...')
        }
      })
    }


    class User{
      constructor(name) {
        this.name = name;
      }
      render(users){
        users.reduce((promise,current)=>{
          return promise.then(()=>{
            return getUser(current).then(res=>{
              return this.view(res);
            })
          })
        },Promise.resolve())
      }
      view(user){
        return new Promise(resolve=>{
          setTimeout(()=>{
            let h2 = document.createElement('h2');
            h2.innerHTML = user.name;
            document.body.appendChild(h2);
            resolve();
          },1000)
        })
      }
    }

    new User().render(['jay','see']);

  • 相关阅读:
    KVM + LinuxBridge 的网络虚拟化解决方案实践
    netfilter/iptables 防火墙
    Linux 的路由功能
    使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移
    the quieter you become,the more you could see.
    ghost和WINHEX磁盘备份功能的区别
    快速格式化和非快速格式化
    软件是如何控制硬件的?
    如何思考一个问题?
    遇到劣质空气开关了
  • 原文地址:https://www.cnblogs.com/jayking1314/p/14914340.html
Copyright © 2011-2022 走看看