持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
今天带大家来学习promsie的几个方法!生命不息,学习不止!
promsie的几个方法
Promise的三种状态:pending(进行中),fulfilled(成功),rejected(失败),只有异步操作的结果,可以决定当前是哪一种状态
Promise.all()
指定并发请求时,等所有请求发送成功,再返回
const p = Promise.all([p1, p2, p3]); //p1、p2、p3都是 Promise 实例
p的状态由p1、p2、p3决定,分成两种情况,Promise.all()方法只适合所有异步操作都成功的情况,如果有一个操作失败,就无法满足要求
Promise.race()
指定并发请求时,谁跑的快返回谁
const p = Promise.race([p1, p2, p3]);
上面代码中,只要
p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数
Promise.allSettled()
指定并发请求时,不管promise对象最后状态如何,都会执行的操作
const p = Promise.allSettled(([p1, p2, p3]););
Promise.allSettled()方法接受一个数组作为参数,数组的每个成员都是一个 Promise 对象,并返回一个新的 Promise 对象。只有等到这三个请求都结束了(不管请求成功还是失败),再进行下一步操作。
Promise.finally()
指定不管promise对象最后状态如何,都会执行的操作
promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});
上面代码中,不管
promise最后的状态,在执行完then或catch指定的回调函数以后,都会执行finally方法指定的回调函数
深拷贝和浅拷贝的几个方法
浅拷贝方法:
object.assign(目标对象,被拷贝的对象)
...展开运算符(对象内容包含二级或更多的复杂的数据,那就是浅拷贝)
深拷贝方法:
JSON //缺点:会忽略函数、undefined、和symbol
递归
lodash
...展开运算符(对象内只是针对简单的一级基础数据,就是深拷贝)
注意:
1、展开运算符使用的对象如果只是针对简单的一级基础数据,就是深拷贝;
2、展开运算符使用的对象内容包含二级或更多的复杂的数据,那就是浅拷贝