1.Promise是什么?
(1)Promise是一个构造函数,用来生成promise实例;
(2)promise实例代表了未来某个将要发生的某个事件(通常是异步操作);
(3)引入promise的好处:在编写代码的时候,异步操作可以以同步操作的流程来表达,避免了层层嵌套的回调函数(‘回调地域’)。
2.promise的3种状态:
(1)pending:初始化状态
(2)rejected:失败状态
(3)fullfilled:成功状态
3.Promise的常用API:
- promise.all()
这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态,它会把iterable里第一个触发失败的promise对象的错误信息作为它的失败错误信息。Promise.all方法常被用于处理多个promise对象的状态集合。
常用用法如下:
let promise1 = new Promise((resolve, reject) => {
...
})
let promise2 = new Promise((resolve, reject) => {
...
})
...
let allPromise = new Promise()
allPromise.all([promise1, promise2, ...]).then((resolve, reject) => {
...
})
- promise.any()
接收一个Promise对象的集合,当其中的一个 promise 成功,就返回那个成功的promise的值。 - promise.race()
当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。 - promise.catch() 处理异常回调
- promise.then() 处理成功回调
4.应用
// 创建promise实例
let promise = new Promise((resolve,reject) => {
//初始化promise状态:pending
//这里通常编写Ajax请求或定时器任务代码 ,根据异步任务的执行结果去修改promise的状态
// 异步任务执行成功
resolve() // 修改promise对象的状态为fullfilled
// 异步任务执行失败
reject() // 修改promise对象的状态为rejected
})
promise
.then(() => { // 成功回调
// 这里通常写Ajax请求成功后,对返回值的处理
},() => { // 失败回调
// 这里写失败后应有的操作
})
学习参考资料:Promise