- Promise是一种常用于异步回调的解决方案,解决函数多层回调地狱问题,以及错误处理很难进行的问题。当然也适用于同步函数回调的情况。
1.首先创建一个Promise只要背下5个单词即可,在函数内写入
return new Promise ((resolve, reject), => {...})
一个 Promise 必然处于以下几种状态之一:
- pending : 待定,在处理中
- fulfilled : 操作成功完成。
- rejected: 操作失败。
判断任务为成功就调用resolve(value)传递参数,判断为失败则调用reject(reason)传参。 resolve()和reject()就会在下一步then中分别调用相对应的成功与失败函数,并传递参数给它。
2.第二步,使用.then()
.then(success(value), fail(reason))
定义成功和失败函数。两个函数分别接收之前的resolve和reject传递的参数。在这两个函数里可以继续嵌套Promise。
3.Promise.all的用法
Promis.all([...])
Promise.all()接受一个类数组的对象,这个数组通常是放了很多promise的一个集合。它的作用是整合所有promise的返回值结果进行处理。Promise.all等待所有项都完成(或发生第一个失败),会返回一个结果。
如果传入的 promise 中有一个失败(rejected),Promise.all 会异步地将失败的那个结果传给失败状态的回调函数,而不管其它 promise 是否完成。如果所有传入的 promise 都变为完成状态,或者传入的类数组内没有 promise,Promise.all 异步地将成功结果传给成功回调函数。成功状态的结果是一个数组,它包含所有的类数组对象的值(也包括非promise的值)。
如果all()内为空,Promise.all 会同步地返回一个resolved成功状态。
4.Promise.race的用法
Promis.race([...])
Promise.race()方法返回一个 promise,一旦类数组中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。给定的类数组中的第一个处理完成的promise,就采用第一个promise相同的值作为它的值,从而异步地发送成功或拒绝给回调函数。
简单来说就是谁先第一个判断完,就传递谁的结果。