Promise 是什么?
Promise说的简单通俗一点就是一种写代码的方式,并且是用来写JavaScript编程中的异步代码的
基本用法
let p = new Promise((resolve,reject)=>{
// do something
//满足某些条件执行resolve or reject
if(条件){
resolve()
}else{
reject()
}
})
p.then(()=>{
// 如果p 的状态被resolve了,就进入这里
},()=>{
// reject
}
第一段是调用了Promise构造函数
第二段是调用了Promise实例的 .then 方法
- 构造实例
- 构造函数接受一个函数作为参数
- 调用构造函数得到实例p的同时,作为参数的函数会立即执行
- 参数函数接受两个回调函数参数resolve和reject
- 在参数函数执行的过程中,在内部调用resolve,会将p的状态编程fulfilled,或者调用reject,将p的状态变成rejected
- 调用 .then
- 调用 .then可以为实例p注册两种状态回调函数
- 当实例p的状态为fulfilled,会触发第一个函数执行
- rejected,第二个函数
总结
上面这样构造promise实例,然后调用 .then.then.then的编写方式,就是promise
基本模式
- 异步过程转化成promise
- 三种状态
- .then 注册状态的回调
- 已完成的状态能触发回调
如何使用
promise实例是那种状态:
- pending(待定)
- fulfilled(已执行)
- rejected(已拒绝)
fulfilled和reject 可以说成 : 已成功 和 已失败,这两种状态也称为已完成状态
resolve和reject
调用resolve和reject能分别将promise实例的状态变成fulfilled和rejected,
只有状态变成已完成(fulfilled 和 rejected 之一)才能触发状态的回调
Promise API
promise 的内容分为构造函数、实例方法和静态方法
- 一个构造函数:new Promise
- 两个实例方法:.then 和 .catch
- 四个静态方法:Promise.all、Promise.race(不常用)、Promise.resolve、Promise.reject
- new Promise 能将一个异步过程转换成promise对象。先有了promise对象,然后才有promise编程方式。
- .then用于为promise对象的状态注册回调函数。它会返回一个promise对象,所以可以进行链式调用,也就是 .then后面可以继续 .then , 在注册的状态回调函数中,可以通过return语句改变 .then 返回的promise对象的状态,以及向后面.then注册的状态回调传递数据;也可以不适用return语句,那样默认就是将安抚你会的promise对象resolve
- .catch 用于注册reject状态的回调函数,同时该回调也是程序出错的回调,既如果前面的程序运行过程中出错,也会进入执行该回调函数。同 .then 一样,也会返回新的promise对象。
- 调用Promise.resolve 会返回一个状态为fulfilled 状态的promise对象,参数会作为数据传递给后面的状态回调函数
- Promise.reject与Promise.resolve同理,区别在于返回的promise对象状态为rejectd