什么是promise
一个实例化的promise 表示一个未来完成/拒绝的占位符。
new Promise
new Promise((resolve,reject)=>{})
resolve 表示成功时调用
reject 拒绝时调用
三个状态 :
Pending Fulfilled Rejected
只有 Pending 可以转换为 Fulfilled 或 Rejected ,其他的不能相互转换。单向的。
Promise.resolve()
用来包装生成promise 如果传入值为thenable 会返回 thenable ,如果传入的是普通值,返回一个成功态结果为这个值的promise
Promise.reject()
同上相反
-
Promise的链式调用
then
then(()=>{},()=>{}) 执行后会默认返回一个promise
无论是在第一个函数,还是第二个函数 return 都会以成功态生成一个promise 传递下去
then 拒绝态如果不处理,会一直传递下去,如果中间再出现错误,新的错误覆盖旧的错误
Promise.race([p,1,p2])
如果有一个执行成功或失败,就采用这个promise的结果
Promise.all([])
全部为成功态,会返回一个成功态的promise,onResolve参数为数组形式结果。如果有一个拒绝。就会以拒绝态返回那个拒绝的promise
回调函数:当函数执行成功后,会将它的回调函数添加到任务队列的尾部,等到其他任务执行完后。开始执行他的回调函数
promise.catch 和 promise.then()的拒绝函数是等价的
promise.resolve 参数有三种类型 :1、prommise类型。直接返回这个promise
2、thenable 对象。把这个thenable对象包装成promise对象, promise 成功与拒绝,取决于thenable内部怎么调用
3、 普通值。包装后,返回成功状态的 这个值作为promise成功状态的参数
如果执行器内部发生错误。 promise的错误处理函数会直接调用
Promise 发生错误时,如果不进行错误处理程序 。不会提示错误信息。 这是 js 唯一没有要求强制报错的地方。因此一定要对promise进行错误处理。
浏览器 有两个事件 可以 识别未处理的拒绝状态的promise
then方法接受的参数是函数,而如果传递的并非是一个函数,它实际上会将其解释为then(null),这就会导致前一个Promise的结果会传递下面。