promise的API

1.resolve

let p1 = Promise.resolve(521);
//如果传入的参数为 非promise类型的对象,则返回的结果为成功promise对象
//如果传入的参数为 Promise对象,则参数的结果决定了resolve 的结果

2.reject

 let ps = Pomise.reject(new Promise((resolve,reject)=>{
     resolve('ok');
 }))
 //如果传入的参数为 非promise类型的对象,则返回的结果为失败promise对象
 //如果传入的参数为 Promise对象,则参数的结果决定了resolve 的结果

3.reace

let p1 = new Promise((resolve,reject)=>{
    resolve('ok');
})
let p2 = Promise.resolve('Success')
let p3 = Promise.resolve('Oh Year');
//第一个返回啥,结果就是啥
const result = Promise.race([p1,p2,p3]);
console.log(result)

4.all

let p1 = new Promise((resolve,reject)=>{
    resolve('ok');
})
let p2 = Promise.resolve('Success')
let p3 = Promise.resolve('Oh Year')
//所有成功,才返回成功
const result = Promise.all([p1,p2,p3]);
console.log(result);

promise的使用

1.执行多个回调

 let p = new Promise((resolve, reject) => {
     resolve('OK');
 });
 p.then(value=>{
     console.log(value);
 })
 p.then(value=>{
     alert(value)
 })

2.promise串联多个操作任务

let p = new Promise ((resolve,reject)=>{
    setTimeout(()=>{
        resolve('OK')
    },1000);
});
p.then(value=>{
    return new Promise((resolve, reject)=>{
        resolve("success");
    });
}).then(value => {
    console.log(value)
}).then(value=>{
    console.log(value)
})
//then的value由前一个的返回值决堤,所以第二个打印undifined

3.异常穿透现象

let p = new Promise((resolve,reject)=>{
    setTimeout(()=>{
        resolve('ok');
    },1000);
});
p.then(value => {
    // console.log(111);
    throw'失败拉';
}).then(value=>{
    console.log(222);
}).then(value=>{
    console.log(333);
}).catch(reason => {
    console.log(reason);
})

async与await

1.async

//async函数的返回对象是一个Promise对象
async function main(){
    //1.如果返回值是一个非Promise类型数据,返回成功对象,成功值就是返回值
    // return 521;
    //2.如果返回是一个promise对象,就有这个promise对象决定
    return new promise((resolve,reject)=>
    {
        reject()
    })
}
let result = main();
console.log(result);

2.await

 async function main(){
     let p = new Promise((resolve, reject) =>{
         // resolve('ok');
         reject('Error')
     })
     //1右侧为promise的情况
     // let res = await p;
     // console.log(res)
     //2右侧为其它类型数据
     // let res2 = await 20;
     // console.log(res2);
     //3如果promise是失败的状态
     try{
         let res3 = await p;
     }catch(e){
         console.log(e);
     }
 }
 main();
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐