ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ES6 19Promise状态特点

2021-11-27 20:33:09  阅读:100  来源: 互联网

标签:p2 ES6 resolve 异步 状态 value p1 Promise 19Promise


要点:1.状态特点 2.更多方法

一、状态特点

1.Promise解决了异步多层回调混乱,且执行顺序的问题

2.Promise对象异步操作的三种状态:

(1).Pending(进行中)

(2).Fulfilled(已完成)

(3).Rejected(已失败)

3.当异步操作执行之后,它得到的结果来决定其状态,其他任何操作都无法改变

4.Promise状态只有两种运行方式:从Pending到Fulfilled或Rejected

5.当状态已经固定后,此时就变成Resolved (已完成) 

Pending  - > resolve方法  - > Fulfilled -> Resolved

Pending  - > reject 方法  - > Rejected -> Resolved

测试当前状态,在浏览器环境下比较直观: console.log(p1) ,在不同阶段执行

 

二、更多方法

1.Promise实例可完成异步的排序输出问题

2.Promise提供了一个 all()方法,可以简化多个实例调用输出排序

// p1,p2,p3是三个 Promise实例,数组元素顺序即输出顺序
let p=Promise.all([p1,p2,p3]);

// 将三个 Promise实例的回调组合成数组输出
p.then(value=>{
    console.log(value);  //[ '1.异步', '2.异步', '3.异步' ]
})

 

ps: 1.  p1,p2,p3都是异步操作,但是最终要等待所有异步完成,才可以输出

       2.p1,p2,p3中有一个出现Rejected ,则会执行失败回调

3.Promise提供了一个 race()方法,只输出第一个改变状态的实例

// p1,p2,p3只要有一个改变状态,即回调
let p=Promise.race([p1,p2,p3]);

// 所以,这里只输出p2   2.异步
p.then(value=>{
    console.log(value);
})

 

 

 

4.Promise提供了resolve()和reject(),直接返回一个成功或失败的实例

// 直接返回成功或失败的Promise实例
let ps=Promise.resolve('成功');
let pj=Promise.reject('失败');

ps.then(value=>{
    console.log(value);
    return pj;
}).catch(reason=>{
    console.log(reason);
})

// 等价于
new Promise(resolve=>resolve('成功'));

//最常用的场景,类型一致性
function getP(){
    if(false){  //或true
        return new Promise(resolve=>{
            resolve('异步成功');
        })
    }else{
        return Promise.resolve(0);   //强制类型一致保证程序正确性 Promise.resolve(0)
    }
}

getP().then(value=>{
    console.log(value);
})

标签:p2,ES6,resolve,异步,状态,value,p1,Promise,19Promise
来源: https://www.cnblogs.com/zyp717201/p/15612967.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有