Promise
1.什么是promise?
promise是ES6种新增的异步编程解决方案,在代码中的表现是一个对象;
2. 语法:
```
newPromise(function(resolve,reject){...}/* executor */);
```
promise对象不是异步的,只要创建promise对象就会立即执行存放的代码
3.promise是如何通过同步的流程来表示异步的操作的?
promise对象是通过状态的改变来实现的,只要状态发生改变就会自动触发对应的函数。
4.Promise对象的三种状态:
1. pending:默认状态,只要没有告诉promise任务是成功还是失败就是pending状态;
2. fulfilled(resolved):只要调用resolve函数,状态就会变为fulfilled,表示操作成功;
3. rejected: 只要调用rejected函数,状态就会变为rejected,表示操作失败;
注意点:状态一旦改变就不可逆,既从pending变为fulfilled,那么永远都是fulfilled;既从pending变为rejected,那么永远都是rejected;
5.then方法
- 可以通过上一个promise对象的then方法给下一个promise对象的then方法传递参数;
注意点:无论是在上一个promise对象成功的回调还是失败的回调传递的参数,都会传递给下一个promise对象成功的回调;
- 如果then方法返回的是一个Promise对象,那么会将返回的Promise对象的执行结果中的值传递给下一个then方法;
6.catch方法
catch其实是`then(undefined,()=> {})`的语法糖
注意点:如果不是用链式编程,那么会导致代码报错,原因如下:
- 如果promise的状态是失败,那么是没有对应失败的监听就会报错;
- then方法返回一个新的promise,新的promise会继承原有的promise的状态;
- 如果新的promise的状态是失败,但是没有对应失败的监听也会报错;
7.Promise的All静态方法
1. all方法接受一个数组
2. 如果数组中有多个Promise对象,只有都成功才会执行then方法,并且会按照添加的顺序,将所有成功的结果打包到一个新的数组中返回
3. 如果数组中不是promise对象,那么会直接执行then方法
应用场景:批量加载,要么一起成功,要么一起失败
8.Promise的race静态方法
1. all方法接受一个数组;
2. 如果数组中有多个Promise对象,谁先返回就听谁的,后返回的会被抛弃;
3. 如果数组中不是Promise对象,那么会直接执行then方法;
应用场景:接口调试,超时处理