【前端学习之路】ES6新特性 Promise基本方法 、async函数(阮一峰老师、小马哥_老师 课程笔记)

发布于:2023-01-18 ⋅ 阅读:(187) ⋅ 点赞:(0)

1、Promise.then()方法

Promise 实例具有 then 方法,其第一个参数是 resolve 状态的回调函数,第二个参数是 reject 状态的回调函数,它们是可选的。

then 方法返回的是一个新的 Promise 实例,因此可以采用链式写法,即then 方法后面再调用另一个then方法。

2、Promise.catch()方法

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

 如果 Promise 状态已经变为resolve, 再抛出错误是无效的,因为Promise状态一旦改变,就永久保持。

3、Promise.resolve()方法

有时需要将现有对象转为 Promise 对象, Promise.resolve()就可以完成。

4、Promise.all()方法

Promise.all()方法用于将多个Promise实例,包装成一个新的 Promise 实

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

p的状态由p1、p2、p3决定,只有有一个被reject,p的状态就变为reject。此时第一个被reject的实例的返回值会传递给p的回调函数。

5、Promise.race()方法

Promise.race()方法同样是将多个Promise 实例,包装成一个新的Promise实例。它与all方法的

区别在于,只要有一个实例率先改变状态,p的状态就跟着改变,并且率先改变的Promise实例的

返回值会传递给p的回调函数。

6、Promise.finally()方法

Promise.finally()方法用于无论Promise 对象最后状态如何,都会执行的操作。

async函数

async (异步)可以理解为定义异步函数的关键字,实则是对Generator函数的改进,将 * 换成 async,将 yield 换成 await。

async 函数有更好的语义

async 表示函数里有异步操作,await 表示紧跟在后面的表达式需要等待结果。

async 函数的返回值是Promise对象,可以直接使用Promise的方法。

* async函数返回的Promise对象的状态变化

async 函数返回的Promise对象,必须等到内部所有 await 命令后面的Promise对象执行完,才会发生状态改变,除非遇到 return 语句或者抛出错误。 换句话说,也就是只有等async 函数内部的异步操作执行完后,才会执行 then 方法指定的回调函数。

任何一个 await 语句后面的Promise 对象变为 reject 状态,那么整个 async 函数都会中断执行