promise初识

一.什么是promise?

要认识promise这个工具的话,我们可以从抽象意义上和具体意义上对他进行表述。

(1)抽象表达

1.promise是一门新的技术(es6规范)。

2.promise是JS中异步编程的新解决方案,旧方案是调用回调函数。

(2)具体表达

1.从语法上来说,promise是一个构造函数。

2.从功能上来说,promise对象用来封装一个异步操作并可以成功/失败的结果。

二.为什么要用promise,他有什么优缺点吗?

要分析promise这个工具的话,我们就要从他的优缺点角度出发。

(1)优点

1.相比于传统的回调函数,promise更加灵活,不局限于异步任务开始前指定。

2.可以进行链式调用,解决回调地狱的问题。

(2)缺点

1.不能从根本上解决回调地狱的问题。

2.链式调用过长会影响代码可读性,维护性低。

3.如果没添加.catch方法有可能无法捕获异常,导致程序崩溃。

三.promise状态改变特征(promisestate)

(1)promise有哪些状态

promise一共有padding(等待状态),resolved(成功状态),rejected(失败状态).

(2)promise状态改变特征

1.padding->resolved

2.padding->rejected

3.不能直接从resolved->rejected,并且每个promise对象只能改变一次,改变后会传输一个结果数据成功为value,失败为reason

四.promise结果属性(promiseResult)

两种状态:fulfilled(表示成功),rejected(表示失败)

五.promise语法格式

new Promise(function (resolve, reject) {
  // resolve 表示成功的回调
  // reject 表示失败的回调
}).then(function (res) {
  // 成功的函数
}).catch(function (err) {
  // 失败的函数
})

其中我们就可以发现function中的两个参数resolve和reject,其中这两个参数也是两个函数,很好理解,resolve函数存在的意义就是将promise对象状态转换成一个成功的状态,并将其结果作为参数传递出去,而reject则是将promise对象状态转换成一个失败的状态,将其结果传递出去

在promise实例生成之后通过.then来去调用resolved状态rejected状态的回调函数。

六.promise的四种常见方法

(1)promise.resolve()
let p1=Promise.resolve(234)
console.log(p1);
//如果传入的参数为非promise类型的对象,则返回结果为成功的promise类型对象
//如果掺入的参数为promise类型对象,则返回结果由参数结果决定
let p2=Promise.resolve(new promise((resolve,reject)=>{
resolve('ok');
}))
console.log(p2);

promise.resolve()方法是返回一个成功/失败的结果

分析上述代码,对象p1中传入的参数为234,他是非promise类型对象,所以返回结果应该是成功promise类型对象,即promisestate为fulfilled,而p2中传入的参数为promise类型对象,分析其参数结果应该是成功,所以返回结果也是成功,即promisestate也为fulfilled。

运行结果如下: 

 

 (2)promise.reject()
let p1 = Promise.reject(521);
        console.log(p1);
        let p2 = Promise.reject(new Promise((resolve, reject) => {
            resolve('ok');
        }))
        console.log(p2);

promise.reject()方法返回一个失败的promise类型对象

不管promise.reject()中的参数是以何种形式的对象,他都会返回一个失败的promise类型对象

运行结果如下

 

(3)promise.all()
let p1=new Promise((resolve, reject)=>{
resolve('ok');
});
let p2=Promise.resolve('om');
let p3=Promise.resolve('oo');
const result=Promise.all([p1,p2,p3]);
console.log(result);

包含n个promise的数组

返回一个新的promise,只有当所有的promise成功才成功只要有一个失败了就直接失败 

运行结果如下

 

(4)promise.race()
 let p1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('ok');
            }, 1000);
        });
        let p2 = Promise.resolve('om');
        let p3 = Promise.resolve('oo');
        const result = Promise.race([p1, p2, p3]);
        console.log(result);

 包含n个promise的数组

 返回一个新的promise,第一个promise的结果就是最终的结果状态

 运行结果如下

 

promise.race和promise.all的区别?

promise.all:只有所有的promise成功才能成功,只要有一个失败就失败

promise.race:返回第一个新的promise,第一个完成的promise为最终结果

小结

不论是在前端的项目开发中还是在前端的面试过程中,Promise的地位就是举足轻重的,所以,学好promise是成为一个优秀的前端工程开发师的必要技能,所以,干就完了,奥利给!!! 

😃😃

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值