美文网首页
ES6--Promise

ES6--Promise

作者: bjhu电net | 来源:发表于2017-09-22 14:04 被阅读0次

Promise解决异步回调的问题

{
    //基本定义
    let ajax=function(callback){
        console.log("执行")
        setTimeout(function(){
            callback&&callback.call();
        },1000)
    };
    ajax(function(){
        console.log("执行完了")
    })
    //执行
    //执行完了
}
{
    let ajax=function(){
        console.log("执行");
        return new Promise(function(resolve,reject){
            setTimeout(function(){
                resolve();
            },1000)
        })
    }
    ajax().then(function(){
        console.log("执行完了")
    })
    //执行
    //执行完了
}
{
    let ajax=function(){
        console.log("执行");
        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("执行完了")
    })
    //执行
    //执行完了
}
{
    let ajax=function(num){
        console.log("执行");
        return new Promise(function(resolve,reject){
            if(num>5){
                resolve()
            }else {
                throw new Error("出错了")
            }
        })
    }
    ajax(6).then(function(){
        console.log(6)
    }).catch(function(err){
        console.log(err)
    })
    //6
    ajax(4).then(function(){
        console.log(6)
    }).catch(function(err){
        console.log(err)
    })
    //Error: 出错了
}

Promise.all和Promise.race

{
    //所有图片加载完再加载页面
    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 showImgs(imgs){
        imgs.forEach(function(img){
            document.body.appendChild(img)
        })
    }
    Promise.all([
        loadImg('http://img2.imgtn.bdimg.com/it/u=4155809725,2453290283&fm=27&gp=0.jpg'),
        loadImg('http://img2.niutuku.com/desk/1208/1446/ntk-1446-13755.jpg'),
        loadImg('http://img0.imgtn.bdimg.com/it/u=4273540577,2947670665&fm=214&gp=0.jpg')
    ]).then(showImgs)
}
{
    //一个图片加载完就好
    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 showImgs(img){
        document.body.appendChild(img)
    }
    Promise.race([
        loadImg('http://img2.imgtn.bdimg.com/it/u=4155809725,2453290283&fm=27&gp=0.jpg'),
        loadImg('http://img2.niutuku.com/desk/1208/1446/ntk-1446-13755.jpg'),
        loadImg('http://img0.imgtn.bdimg.com/it/u=4273540577,2947670665&fm=214&gp=0.jpg')
    ]).then(showImgs)
}

相关文章

  • ES6--Promise

    学过ES6的同学大概都知道Promise,可想而知Promise在ES6中很重要。 Promise对象代表了未来将...

  • ES6--Promise

    Promise解决异步回调的问题 Promise.all和Promise.race

  • es6--Promise()用法

    promise是用来解决异步编程的书写问题。在使用js时,为了实现某些逻辑经常会写出层层嵌套的回调函数,如果嵌套过...

  • es6--Promise对象

    promise 对象 是异步编程的解决方案 基本概念:相当于一个容器,保存着未来才会结束的事件(异步操作)的一个结...

  • 手撕ES6--Promise

    废话不多说,直接上代码 嗯,就是这样的,随手做了两个测试,一点问题也没有,代码实现比较简单,就不多说了.

网友评论

      本文标题:ES6--Promise

      本文链接:https://www.haomeiwen.com/subject/vthfextx.html