promsie的几个方法and深拷贝和浅拷贝的方法

222 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

今天带大家来学习promsie的几个方法!生命不息,学习不止!

promsie的几个方法

Promise的三种状态:pending(进行中),fulfilled(成功),rejected(失败),只有异步操作的结果,可以决定当前是哪一种状态

Promise.all()

指定并发请求时,等所有请求发送成功,再返回

const p = Promise.all([p1, p2, p3]);  //p1、p2、p3都是 Promise 实例

p的状态由p1p2p3决定,分成两种情况,Promise.all()方法只适合所有异步操作都成功的情况,如果有一个操作失败,就无法满足要求

Promise.race()

指定并发请求时,谁跑的快返回谁

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

上面代码中,只要p1p2p3之中有一个实例率先改变状态,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最后的状态,在执行完thencatch指定的回调函数以后,都会执行finally方法指定的回调函数

深拷贝和浅拷贝的几个方法

浅拷贝方法:

object.assign(目标对象,被拷贝的对象) 

...展开运算符(对象内容包含二级或更多的复杂的数据,那就是浅拷贝)

深拷贝方法:

JSON   //缺点:会忽略函数、undefined、和symbol 
递归
lodash
...展开运算符(对象内只是针对简单的一级基础数据,就是深拷贝)

注意:

 1、展开运算符使用的对象如果只是针对简单的一级基础数据,就是深拷贝;
 2、展开运算符使用的对象内容包含二级或更多的复杂的数据,那就是浅拷贝