• 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']);

  • 相关阅读:
    [转载] VsCode中使用Emmet神器快速编写HTML代码
    Hexo 博客部署到私有云服务器
    钉钉小程序通过 Canvas 将页面生成图片并保存到本地相册
    2021你应该了解的前端知识体系
    JavaScript 中的模块化
    vue中click事件方法不加括号则会将事件作为入参
    css:左右元素没对齐,调整子元素的vertical-align属性
    js通过宽高特征对图片进行分类
    配置服务器上的git仓库
    js获取当前设备信息
  • 原文地址:https://www.cnblogs.com/jayking1314/p/14914340.html
Copyright © 2020-2023  润新知