什么是promise
promise
是异步编程的一种方案,解决了地狱回调的问题,是一种链式调动的方式
-
Promise
简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。 -
promise
是一个对象,从它可以获取异步操作的的最终状态(成功或失败)。 -
Promise
是一个构造函数,对外提供统一的 API,自己身上有all、reject、resolve
等方法,原型上有then、catch
等方法。
名词约定
promise
(首字母小写)对象指的是“Promise
实例对象”Promise
首字母大写且单数形式,表示“Promise
构造函数”Promises
首字母大写且复数形式,用于指代“Promises
规范”
Promise的两个特点
Promise
对象的状态不受外界影响
1)pending
初始状态
2)fulfilled
成功状态
3)rejected
失败状态
Promise
有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态
Promise
的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由 pending
变成fulfilled
或者由pending
变成rejected
使用 new 来创建一个promise对象。
Promise
接受一个「函数」作为参数,该函数的两个参数分别是resolve
和reject
。这两个函数就是就是「回调函数」
resolve
函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject
函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去
- then()方法:
then
方法就是把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。 - catch()方法: 当执行
resolve
的回调(也就是上面 then 中的第一个参数)时,如果抛出异常了(代码出错了),那么也不会报错卡死js
,而是会进到这个catch
方法中。 - all()方法:
Promise
的all
方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。 - race()方法:
race
按字面解释,就是赛跑的意思。race
的用法与all
一样,只不过all
是等所有异步操作都执行完毕后才执行then
回调。而race
的话只要有一个异步操作执行完毕,就立刻执行then
回调。
promise简单举例
//Promise异步封装ajax
<script>
function Feach(method, ) {
let p = new Promise(