Promise基础概念

74 阅读2分钟

用于异步计算,标识现在,将来,或者永不可用的值

异步操作队列化,按照期望的顺序在执行,返回符合预期的结果。

可以再对象之间传递和操作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实例,接受一个数组作为参数