美文网首页Promiseexpress专题
ES6 同步和异步、Promise

ES6 同步和异步、Promise

作者: 祝名 | 来源:发表于2018-12-15 17:16 被阅读0次

    一.同步与异步

    1. Promise作用:解决异步回调的问题

    二.Promise对象

    目的:创建异步对象,当异步对象中的异步操作执行完之后,再执行想要执行的东西。

    1. resolve 表示将状态变成成功完成,reject 表示将状态变成失败完成。

    2. 当resolve方法执行完成之后,再执行then方法。

    let p = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            console.log('执行完毕!');
            resolve();
            //表示完成
        },3000)
    });
    p.then(()=>{
        console.log('promise异步操作完成了');
    });
    

    三.Promise传参

    • resolve里的参数可以传给then
    let p = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            //console.log('脱完衣服');
            resolve(3);
        },3000)
    });
    p.then((d)=>{
        console.log('去洗'+d+'件衣服');
    });
    -->打印去洗3件衣服
    

    四.Promise错误处理

    1. reject中存储错误处理的参数,可以传给then方法中的第二个参数

    let p = new Promise((resolve,reject)=>{
        setTimeout(()=>{
            //resolve('读写成功');
            reject('读写失败');
        },2000)
    });
    p.then((d)=>{
        console.log('执行成功');
    },(err)=>{
        console.log(err);
    });
    -->读写失败
    

    五.Promise.all()-->一个脚本中有多个promise时,监控多个Promise对象执行完成

    1.Promise.all([p1,p2,p3]):把promise打包,扔到一个数组里面,打包完还是一个promise对象.

    let p1 = new Promise((resolve,reject)=>{
        let time = Math.random()*4000+1000;
        setTimeout(()=>{
            console.log('p1完成');
            resolve();
        },time)
    });
    let p2 = new Promise((resolve,reject)=>{
        let time = Math.random()*4000+1000;
        setTimeout(()=>{
            console.log('p2完成');
            resolve();
        },time)
    });
    let p = Promise.all([p1,p2)];
    p.then(()=>{
        console.log(全部执行完毕);
    })
    -->p1和p2全部执行完毕后,才会执行p.then方法里的操作
    

    必须确保所有promise对象都是resolve状态

    输出["aaaa","bbbb","cccc"]

    六.

    1.Promise对象的then方法有两个参数,一个是成功后的参数,另一个是失败的参数方法

    • promise.then(success,fail)
    失败鸟

    2.new Promise().catch()-->错误捕获

    等同于上面的reject,返回“失败鸟”
    也可这样使用

    七.Promise的方法

    1.Promise.resolve('xxx'):将现有的东西,转成一个Promise对象,且是resolve成功状态

    输出aaa

    等价于下面这句话


    2.Promise.reject('xxx'):将现有的东西,转成一个Promise对象,且是reject失败状态

    输出aaaa

    4.Promise.race():与all的不同之处在于,只要有一个是resolve状态就可以返回

    输出aaaa

    八.


    相关文章

      网友评论

        本文标题:ES6 同步和异步、Promise

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