Promise

Promise是什么?

  1. Promise是JS中进行异步操作的新的解决方案,在旧的回调函数的形式中,当后一个异步请求的参数依赖于前一个异步请求的结果时,就会出现层层嵌套的情况,使得代码维护性变得比较差。
  2. Promise可以很好的解决这个回调问题,then的链式调用使得Promise的结构层次很清晰,async和await能使代码的运行变成同步。
  3. Promise支持链式调用,解决了回调地狱问题。

什么是回调地狱?
回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调执行的条件

Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)

一个 Promise 必然处于以下几种状态之一:

案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let A = new Promise((resolve , reject) =>{
resolve('成功')
reject('失败')
})
console.log('A', A)

let B = new Promise((resolve , reject) =>{
reject('失败')
resolve('成功')
})
console.log('B',B)

let C = new Promise((resolve,reject) =>{
throw('报错')
})
console.log('C',C)

  • 1、执行了resolve,Promise状态会变成fulfilled,即 已完成状态
  • 2、执行了reject,Promise状态会变成rejected,即 被拒绝状态
  • 3、Promise只以第一次为准,第一次成功就永久fulfilled,第一次失败就永远状态为rejected
  • 4、Promise中有throw的话,就相当于执行了reject

Generator

  1. Genertor 函数是es6 新增的一种异步编程的解决方案,语法和传统的函数完全不同;Genertor 函数的最大的特点就是可以交出函数的执行权,即暂停执行。
  2. 声明Genertor函数的时候,要在function关键字和函数名之间加一个星号:*,比如 function *fn()
  3. Generator函数封装了多个内部状态,通过yield表达式定义内部状态,执行时返回一个迭代器对象。

Generator的使用

1
2
3
4
5
6
7
8
9
10
11
12
// 加入星号,表示Genertor函数
function *gen(){
yield 'Alive'
yield 'Seven'
return 'goodbye'
}

let A = gen()
console.log(A.next()) // {value: 'Alive', done: false}
console.log(A.next()) // {value: 'Seven', done: false}
console.log(A.next()) // {value: 'goodbye', done: true}
console.log(A.next()) // {value: undefined, done: true}

调用 Generator 函数,返回一个遍历器对象,代表 Generator 函数的内部指针。以后,每次调用遍历器对象的next方法,就会返回一个有着value和done两个属性的对象。value属性表示当前的内部状态的值,是yield表达式后面那个表达式的值;done属性是一个布尔值,表示是否遍历结束。

async/await