JavaScript-Promise对象
Promise介绍
Promise
是一个对象,它代表了一个异步操作的最终完成或者失败,及其结果值。- 本质上Promise是一个函数返回的对象,可以在它上面绑定回调函数,这样就不需要再一开始把回调函数作为参数传入这个函数。
Promise语法
executor
是带有resolve
和reject
两个参数的函数。Promise
构造函数执行时立即调用executor
函数,resolve
和reject
两个函数作为参数传递给executor
。resolve
和reject
函数被调用时,分别将Promise
的状态改为fulfilled
(完成)或rejected
(失败)。executor
内部通常会执行一些异步操作,一旦异步操作执行完毕,成功时调用resolve
函数将Promise
状态改成fulfilled
,失败时调用reject
函数将Promise
状态改成rejected
。- 如果在
executor
函数中抛出一个错误,那么该Promise
状态为r
ejected。
executor`函数的返回值会被忽略
|
Promise描述
- 一个
Promise
有以下几种状态:pending
: 初始状态,既不是成功,也不是失败状态。fulfilled
: 意味着操作成功完成。rejected
: 意味着操作失败。
pending
状态的Promise
对象可能会变为fulfilled
状态并传递一个值给相应的状态处理方法,也可能变为失败状态rejected
并传递失败信息。- 当其中任一种情况出现时,
Promise
对象的then
方法绑定的处理方法handlers
就会被调用。then
方法包含两个参数:onfulfilled
和onrejected
,它们都是Function
类型。
- 当
Promise
状态为fulfilled
时,调用then
的onfulfilled
方法。
|
- 当
Promise
状态为rejected
时,调用then
的onrejected
方法。
|
Promise方法
Promise.all(iterable)
Promise.all(iterable)
方法返回一个Promise
实例,此实例在iterable
参数内所有的promise
都完成resolved
。- 如果参数中
promise
有一个失败rejected
,此实例回调失败reject
,失败的原因是第一个失败promise
的结果。- 如果你传入的
promise
中,有四个promise
在一定的时间之后调用成功函数,有一个立即调用失败函数,那么Promise.all
将立即变为失败。
- 如果你传入的
- 此方法在集合多个
promise
的返回结果时很有用,它通常在启动多个异步任务并发运行并为其结果创建承诺之后使用,以便人们可以等待所有任务完成。
|
|
Promise.race(iterable)
Promise.race(iterable)
方法返回一个promise
,一旦迭代器中的某个promise
解决或拒绝,返回的promise
就会解决或拒绝。- 可以理解为竞速,谁先执行完返回谁的结果。
|
Promise.reject()
Promise.reject()
方法返回一个带有失败原因的Promise
对象。
|
Promise.resolve()
Promise.resolve()
方法返回一个以给定值解析后的Promise
对象。
|
Promise原型方法
Promise.prototype.then(onFulfilled, onRejected)
then()
方法返回一个Promise
。它最多需要有两个参数:Promise
的成功和失败情况的回调函数。onFulfilled
当Promise
变成接受状态fulfilled
时调用的函数。onRejected
当Promise
变成拒绝状态rejected
时调用的函数。
|
- 链式调用
then
方法返回一个Promise
对象,其允许方法链。
|
Promise.prototype.catch(onRejected)
catch()
方法返回一个Promise
,并且处理拒绝的情况。// catch链式操作 1
let a = Promise.reject('失败了1');
a.then(res => {
console.log(res)
}).catch(err => {
// 失败了1
console.log(err);
return Promise.reject('失败了2');
}).then(res => {
console.log(res)
}).catch(err => {
// 失败了2'
console.log(err)
})
|
- 如果
then
函数中有onRejected
回调函数,catach
不会执行
|
Promise.prototype.finally(onFinally)
finally()
方法返回一个Promise
。在promise
结束时,无论结果是fulfilled
或者是rejected
,都会执行指定的回调函数。- 由于无法知道
promise
的最终状态,所以finally
的回调函数中不接收任何参数,它仅用于无论最终结果如何都要执行的情况。
|