用于异步计算,标识现在,将来,或者永不可用的值
异步操作队列化,按照期望的顺序在执行,返回符合预期的结果。
可以再对象之间传递和操作Promise,帮助我们处理队列。
JS包含大量的异步操作,目标值操作Dom,
缺点:
异步一旦新建它就会立即执行,无法中途取消
一旦建立立即执行
如果不设置回调函数,其内部抛出的错误,不会反应到外部
处于pending状态时,无法得知目前进展到哪一个阶段
Promise对象是一个构造函数,用来生成Promise实例
const promise = new Promise(function(resolve,reject){
if(/异步操作成功/){
resolve(value)
}else{
reject(error)
}
})
Promise构造函数接受一个函数作为参数
resolve():异步操作成功时调用,并将异步操作的结果作为参数传递出去
reject():异步操作失败时,将异步操作报出的错误,作为参数传递出去
Promise实例生成后,可以使用then方法,then方法是定义在原型对象Promise.prototype 上的,其作用是为Promise实例添加状态改变时的回调函数,分别指定resolved状态和rejected状态的回调函数
Promise.prototype.then() :接收两个回调函数作为参数,均都接收Promise对象传出的值作为对象
返回的是一个新的Promise实例,因此可以采用链式写法,后面调用另一个then
Promise.prototype.catch() 是 . then(null,rejection) 或者 .then(undefined,rejection)的别名,用于指定发生错误时的回调函数
如果 Promise 状态已经变成resolved,再抛出错误是无效的
Promise在resolve语句之后,再抛出错误,不会被捕获,等于没有抛出,因为Promise的状态一旦改变就不会再变了
“冒泡”性质:
Promise对象的错误特性,会一直向后传直到捕获为止,错误总会被下一个catch 语句捕获
一般来说,不要在then方法里面定义 Reject 状态的回调函数,总是使用catch 方法。
Promise吃掉错误:
如果没有使用catch()方法指定错误处理的回调函数,Promise 对象抛出的错误不会传递到外层代码,即不会有任何反应。Promise内部错误不会退出进程,终止脚本执行,Promise内部的错误不会影响到Promise外部的代码
Promise.prototype.finally():——本质是then方法的特例
用于指定不管Promise对象最后状态如何,都会执行的操作,不接受任何参数,里面的操作应与状态无关,不依赖Promise的执行结果,finally方法总是会返回原来的值
Promise.all():用于将多个Promise 实例包装成一个新的Promise实例,接受一个数组作为参数