ES6基础 04
1. Promise对象
Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值
异步操作会先挂起,优先执行同步操作后再执行异步操作
一个 Promise
对象代表一个在这个 promise 被创建出来时不一定有已知的值。它让您能够把异步操作最终的成功返回值或者失败原因和相应的处理程序关联起来。 这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 promise,以便在未来某个时候把值交给使用者。
说人话就是promise用于判断接口请求是否正确,正确执行then方法里的内容,错误执行catch里的内容。最后返回promise里的执行结果。
一个 Promise
必然处于以下几种状态之一:
- 初始化(pending): 初始状态,既没有被接受,也没有被拒绝。
- 已接受(fulfilled): 意味着操作成功完成。
- 已拒绝(rejected): 意味着操作失败。
1.1 基本用法
let promise1 = new Promise(function (resolve, reject) { //resolve、reject均为方法 |
1.2 then、catch方法
then方法会接收promise的fulfilled状态并执行then方法里的内容
then()
函数会返回一个和原来不同的新的 Promise,所以then可以链式调用
如果promise
- 返回了一个值,那么
then
返回的 Promise 将会成为接受状态,并且将返回的值作为接受状态的回调函数的参数值 - 没有返回任何值,那么
then
返回的 Promise 将会成为接受状态,并且该接受状态的回调函数的参数值为undefined
。 - 抛出一个错误,那么
then
返回的 Promise 将会成为拒绝状态,并且将抛出的错误作为拒绝状态的回调函数的参数值
promise1 |
catch()
函数同then一样,会接收promise的rejected状态并执行catch方法里的内容
不过有以下要注意的内容
// 抛出一个错误,大多数时候将调用catch方法 |
1.3 all方法
all()
方法接受一个数组作为参数,数组的元素是Promise实例对象,当参数中的实例对象的状态都为fulfilled时,Promise.all( )才会有返回。
Promise.all([pro1,pro2]).then(function(result){ //pro1和pro2是promise实例对象 |
一般的应用场景:一般这样的场景:我们执行某个操作,这个操作需要得到需要多个接口请求回来的数据来支持,但是这些接口请求之前互不依赖,不需要层层嵌套。这种情况下就适合使用Promise.all( )方法,因为它会得到所有接口都请求成功了,才会进行操作
1.4 race方法
race()
参数要求跟Promise.all( )
方法一样,不同的是,它参数中的promise实例,只要有一个状态发生变化(不管是成功fulfilled还是异常rejected),它就会有返回,而且谁优先返回就接受谁。其他实例中再发生变化,也不会再执行了
Promise.all([pro1,pro2]).then(function(result){ //pro1和pro2是promise实例对象 |
2. ES7中Async和await
async
和await
关键字让我们可以用一种更简洁的方式写出基于promise异步行为,而无需刻意地链式调用promise
。
async
的返回值是一个promise对象,这个promise要么会通过一个由async函数返回的值被解决,要么会通过一个从async函数中抛出的(或其中没有被捕获到的)异常被拒绝。
async函数可能包含0个或者多个await
表达式。await表达式会暂停整个async函数的执行进程并出让其控制权,只有当其等待的基于promise的异步操作被兑现或被拒绝之后才会恢复进程。promise的解决值会被当作该await表达式的返回值。
function work() { |
3. 类基本用法
类是用于创建对象的模板。他们用代码封装数据以处理该数据。类是“特殊的函数”,就像定义的函数表达式和函数声明一样,类语法有两个组成部分:类表达式和类声明。
3.1 类的声明
class cube { |
3.2 类的表达式
类的表达式有未命名和命名两种
// 未命名/匿名类 |
3.3 类体和方法定义
constructor方法是必须且唯一的,用于创建和初始化一个由class
创建的对象;其他方法可以自定义
‘static’ 关键字用来定义一个类的一个静态方法。不能继承,调用静态方法不需要实例化该类,但不能通过一个类实例调用静态方法。静态方法通常用于为一个应用程序创建工具函数
3.4 类的继承
extends
关键字用于实现子类继承父类,子类使用super关键字来调用父类的属性或方法
class Animal { |
4. 模块化
4.1 模块的导入与导出
例如:导出model.js的内容;导入到main.js中
as 可以在导出与导入的大括号内为导出导入项设置一个别名;主要用于解决命名冲突的问题
model.js
export { name as modelName, say as modelSay }; |
main.js
import { name as modelName, say as modelSay } from 'model.js' |