一、Async—异步
1.Async是Generator的语法糖,Generator是解决异步请求的基础
2. Async函数的执行和普通函数一致,只需要一行代码即可,因为他具有内置的执行。
3.Async
表示函数里有异步操作,await
表示紧跟在后面的表达式需要等待结果。
4.await命令只能出现在async函数内部,否则会报错
二、Generator
1.执行 Generator 函数会返回一个遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。通过.next()方法来访问yield的状态
2.特征:
①function关键字与函数名之间有个星号*
function* funGenerator(){}
②函数内部使用yield表达式
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
3.yield定义代码不同的内部状态。上述代码中helloWorldGenerator函数有三个状态:hello、world、return语句(结束执行)
yield之前可以写无数个业务代码,代码块到yield表示一个状态,从上一个yield表达式停下的地方一直执行代码到另一个yield又是另一个状态
三、Promise
1.Promise,是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
2.Promise 是一个对象,从它可以获取异步操作的消息。
3.Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
4.Promise对象提供统一的接口,使得控制异步操作更加容易。
5.Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。
6.Promise对象代表一个异步操作有三种状态: pending(进行中)、fulfilled(已成功)和rejected(已失败)。
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value); // pending -> fulfilled 成功的回调
} else {
reject(error); // pending -> rejected 失败的回调
}
});
链式调用
promise.then(() => {}).catch(() =>{})
then方法返回的是一个新的Promise实例
不管promise最后的状态,在执行完then或catch指定的回调函数以后,都会执行finally方法指定的回调函数。finally方法的回调函数不接受任何参数,