es6Promise熬夜整理

目录

 

1.Promise是什么:

2.基本用法:

3.Promise中的catch:

4.Promise中的finally:

5.promise.race()


1.Promise是什么:

promise是es6新生的的异步操作一个对象,也可以说是一个容器,是一个链式执行的方式,只看重结果,不考虑中间的监听过程,执行结束后只有两种结果(成功,失败)中的一种,一旦执行完成就结束了。

 

2.基本用法:

promise有个构造函数,有两个参数resolve和reject,当时执行到resolve后,会执行.then().then()的方法,执行了reject和执行.catch的方法,如果不调用reject和resolve,则不会调用.then和.catch的方法,reject(xxx)和resolve(xxx)的参数会传入到catch和then里

const promise = new Promise(function(resolve, reject) { // ... some code if (/* 异步操作成功 */){ resolve(value); } else { reject(error); } }).then().then()(次数不限,链式执行).catch()

变形:如果需要延迟执行:

new Promise((resolve,reject)=>{

setTimeout(resolve|reject,1000,xxx)

}).then().catch()

注意:Promise 新建后立即执行,所以首先输出的是Promise。然后,then方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行,所以resolved最后输出

变形:在一个promise调用另一个promise:p2在一秒后调用resolve,此时传入的是p1,所以p2就在等待p1的操作结果,过了两秒之后,p2变为reject,p1一会变为reject,也就是说p2决定p1状态

const p1 = new Promise(function (resolve, reject) { setTimeout(() => reject(new Error('fail')), 3000) }) const p2 = new Promise(function (resolve, reject) { setTimeout(() => resolve(p1), 1000) }) p2 .then(result => console.log(result)) .catch(error => console.log(error)) // Error: fail

注意点:一般来说调用了reslove和reject之后,Promise的使命就完成了,就不需要再resolve()||reject()后面继续添加逻辑,应该放在then||catch里面

例如:new Promise((resolve, reject) => { return resolve(1); // 后面的语句不会执行 console.log(2); })

 

3.Promise中的catch:

如果该对象状态变为resolved,则会调用then方法指定的回调函数;如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定的回调函数,处理这个错误。另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。

const promise = new Promise(function(resolve, reject) { resolve('ok'); throw new Error('test'); });此时resolve执行了就不会执行catch

 

4.Promise中的finally:

finally是promise最后会执行的方法不管是什么状态,finally执行不需要任何参数:

promise .then(result => {···}) .catch(error => {···}) .finally(() => {···});

 

5.promise.race()

const p = Promise.race([p1, p2, p3]);)

上面代码中,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值