【前端学习之路】 ES6新特性 Generator 、Promise基本概念(小马哥_老师课程笔记)

发布于:2023-01-20 ⋅ 阅读:(15) ⋅ 点赞:(0) ⋅ 评论:(0)

由于本人在网上能找到的课程都对新手不太友好,于是 参照阮一峰老师的文档进行自己的理解,做出如下笔记:

ES6 入门教程  (阮一峰老师的ES6入门)

1、Generator 函数的语法

* 基本概念

Generator 函数是ES6 提供的一种异步编程解决方案,可以将其理解成一个封装多个内部状态的状态机,执行Generator函数会返回一个遍历器对象,该对象依次遍历Generator函数内部的每一个状态。

* 形式

形式上,Generator函数是一个普通函数,但是有两个特征,一是function关键字与函数名之间有一个星号;二是函数体内部使用yield表达式,定义不同的内部状态。

 上述代码定义了一 个Generator函数 helloWorldGenerator,其内部有两个 yield 关键字定义的表达式,即说明该函数有三个状态 hello 、 world 、 return 语句(结束执行)。

Generator 函数调用后,并不执行,返回的也不是函数的运行结果,而是一个指向内部状态的指针对象, 该对象 hw 必须调用next 方法,才可以使得指针下移一个状态,返回value 和 done 值,直到遇到下一个yield表达式 或 return 语句。 

总结:Generator 函数 通过yield 关键字,将函数挂起,为改变执行流提供了可能。

2、Promise的含义

Promise 是异步编程的一种解决方案,简单来说,Promise 是一个保存着某个未来才会结束的事件(通常是一个异步操作)结果的容器。从语法上来说,Promise 是一个对象,从中可以获取该异步操作的消息。Promise 提供统一的API ,各种异步操作都可以用同样的方法进行处理。

* Promise 对象的特点

1、对象的状态不受外界影响,只有异步操作的结果可以决定当前是哪一种状态。Promise 对象代表一个异步操作,有三种状态: pending (进行中) 、fulfilled (已成功) 、rejected (已失败) 。

2、一旦状态改变,就不会再变,任何时候都可以得到这个结果。

Promise 对象的状态改变只有两种可能: 从 pending 变为 fulfilled 或者 从 pending 变为 rejected

只要这两种情况发生,状态就会固定,不再变化,此时称为 resolved (已定型)

* Promise 基本用法

Promise对象是一个构造函数,生成一个Promise 实例,该构造函数接收一个函数作为参数,该函数的两个参数分别是 resolve 和 reject ,它们两个也是函数。

resolve 函数的作用是将 Promise 对象的状态从 “未完成” 变为 “成功” (即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果作为参数传递出去; 

reject 函数的作用是将 Promise 对象的状态从 “未完成” 变为 “失败” (即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误作为参数传递。

 

Promise 对象的简单实例

 then 方法可以接收两个回调函数作为参数,第一个回调函数是状态变为resolved时调用,第二个回调函数是状态变为 rejected时调用,这两个参数是可选的,不一定都要提供。

Promise 执行顺序

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