zoukankan      html  css  js  c++  java
  • es6之promise

    promise用于异步调用

    //基本用法

    let ajax=function(){
            console.log("执行");
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    resolve()
                },1000)
            })
        }
        ajax().then(function(){
            console.log("promise","timeout");
        })
    

    //连续调用

    let ajax=function(){
            console.log("执行1");
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    resolve()
                },1000)
            })
        }
        ajax()
            .then(function(){
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    resolve()
                },2000)
            })
            .then(function(){
                console.log("timeout3")
            })
    
        })
    

    //错误捕获

    let ajax=function(num){
            console.log("执行乐乐乐");
            return new Promise(function(resolve,reject){
                if(num>5){
                    resolve()
                }else{
                    throw Error("出错了");
                }
            })
        }
        ajax(6).then(function(){
            console.log("执行第二步");
        }).catch(function(err){
            console.log("catch",err);
        })
        ajax(1).then(function(){
            console.log("执行第二步");
        }).catch(function(err){
            console.log("catch",err);
        })
    

      

    实例

     //所有图片加载完再加载到页面
        function loadImg(src){
            return new Promise((resolve,reject)=>{
                let img=document.createElement("img");
                img.src=src;
                img.onload=function(){
                    resolve(img);
                }
                img.onerror=function(err){
                    reject(err);
                }
            })
        }
    
        function shopImgs(imgs){
            imgs.forEach(function(img){
                document.body.appendChild(img);
            })
        }
    
        Promise.all([
            loadImg("http://img.tgljweb.com/1720171108170301_tango_img"),
            loadImg("http://img.tgljweb.com/1720171112111533_tango_img"),
            loadImg("http://img.tgljweb.com/1720171104093842_tango_img"),
        ]).then(shopImgs)
    
    //当有一个图片加载完就显示在页面,即哪一张先加载出来,就显示哪一张
        function loadImg(src){
            return new Promise((resolve,reject)=>{
                let img=document.createElement("img");
                img.src=src;
                img.onload=function(){
                    resolve(img);
                }
                img.onerror=function(err){
                    reject(err);
                }
            })
        }
        function shopImgs(img){
            let p=document.createElement("p");
            p.appendChild(img);
            document.body.appendChild(p);
        }
    
        Promise.race([
            loadImg("http://img.tgljweb.com/1720171108170301_tango_img"),
            loadImg("http://img.tgljweb.com/1720171112111533_tango_img"),
            loadImg("http://img.tgljweb.com/1720171104093842_tango_img")
        ]).then(shopImgs)
    

      

      

      

      

  • 相关阅读:
    PCMan:Ubuntu下的最快的文件管理器
    Android 不需要root权限也可卸载系统应用的adb命令
    Directory Opus --- 布局灵活的文件管理,支持文件预览,强烈推荐
    Charles 抓包网络接口请求 修改请求参数 修改返回数据
    做直播app功能测试,怎么开展?
    Python字典内置函数和方法
    pycharm2020.3安装破解版激活教程 附:无限重置时间插件(mac windows linux)
    if not用法
    nvm安装与使用
    Python批量安装.Txt文件中的类库包
  • 原文地址:https://www.cnblogs.com/karila/p/7874316.html
Copyright © 2011-2022 走看看