ES6 18.异步Promise

要点:1.Promise介绍   2.实例测试 

一.Promise介绍

1.Promise,即异步通信编程的一种解决方案,比传统的回调式更强大

2.ES6之前非常多层次嵌套的同步、异步,执行顺序混乱且不好维护

3.Promise很好的解决了这些问题,下面为它的语法

// 创建一个Promise实例
let p =new Promise((resolve,reject)=>{
//   一顿异步通信操作之后,返回成功或失败
// 然后判断成功或失败去执行resolve或reject
if(false){
    // console.log('异步通信执行成功!');
    resolve('执行成功');
}else{
    // console.log('异步通信执行失败!');
    reject('执行失败');
}
})

// then方法可执行resolve的回调函数
// catch方法可执行 reject的回调函数
p.then((value)=>{
    console.log(value);
}).catch((reason)=>{
    console.log(reason);
})

 

ps:上面提供的方法会很清晰 ,它把多层嵌套的回调函数给分离出来,通过  then 和 catch 来实现


4.上面例子的语法,p作为Promise实例,可以进行连缀链式操作

5.当执行then方法后,本身依旧返回当前的Promise实例,方便链式

6.通过构造方法的两个参数去执行回调函数,并传递参数

7.catch ()方法还可以作为then 第二个参数进行存在,方便多层回调

// 一体化操作
p.then((value)=>{
    console.log(value);
},(reason)=>{
    console.log(reason);
})

 

二、实例测试

1.做一个模拟多层次异步通信的实例测试,要异步多个内容,并按照指定顺序执行

2.先给出不进行Promise异步,看它执行的顺序

// 模拟异步1
setTimeout(()=>{
    console.log('1.返回异步通信');
},3500);

// 模拟异步2
setTimeout(()=>{
    console.log('2.返回异步通信');
},800);

// 模拟异步3
setTimeout(()=>{
    console.log('3.返回异步通信');
},1500);

 

ps:这里不管怎么调节,最终输出结果总是:2,3,1 。需求顺序要:1,2,3;

3.将上面模拟异步通信,通过Promise进行改装,再看看执行效果

let p1=new Promise((resolve,reject)=>{
    // 模拟异步1
        setTimeout(()=>{
           resolve('1.异步');
        },3500);
})

let p2=new Promise((resolve,reject)=>{
    // 模拟异步2
        setTimeout(()=>{
            resolve('2.异步');
        },800);
})

let p3=new Promise((resolve,reject)=>{
    // 模拟异步3
        setTimeout(()=>{
            resolve('3.异步');
        },1500);
})

p1.then(value=>{
    console.log(value);
    return p2;
}).then(value=>{
    console.log(value);
    return p3;
}).then(value=>{
    console.log(value);
});

 

返回结果为  :1.异步 2.异步 3.异步

posted @ 2021-11-27 18:17  翟莹萍  阅读(79)  评论(0编辑  收藏  举报