1.什么是promise?
promise是ES6种新增的异步编程解决方案,在代码中的表现是一个对象;
2. 语法:
newPromise(function(resolve,reject){...}/* executor */);
promise对象不是异步的,只要创建promise对象就会立即执行存放的代码
3.promise是如何通过同步的流程来表示异步的操作的?
promise对象是通过状态的改变来实现的,只要状态发生改变就会自动触发对应的函数。
4.Promise对象的三种状态:
pending:默认状态,只要没有告诉promise任务是成功还是失败就是pending状态;
fulfilled(resolved):只要调用resolve函数,状态就会变为fulfilled,表示操作成功;
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静态方法
all方法接受一个数组
如果数组中有多个Promise对象,只有都成功才会执行then方法,并且会按照添加的顺序,将所有成功的结果打包到一个新的数组中返回
如果数组中不是promise对象,那么会直接执行then方法
应用场景:批量加载,要么一起成功,要么一起失败
8.Promise的race静态方法
all方法接受一个数组;
如果数组中有多个Promise对象,谁先返回就听谁的,后返回的会被抛弃;
如果数组中不是Promise对象,那么会直接执行then方法;
应用场景:接口调试,超时处理
网友评论