一、Promise的罕用API
promise的这些办法执行实现都会返回一个新的promise,promise的状态由执行的后果决定。

(1) new Promise()中的excutor函数

new Promise((resolve, reject)=>{  // 依据解决的内容来返回胜利或者失败  resolve(1)})

excutor函数是在JS主线程中的,一旦申明就会立刻执行

(2) Promise.prototype.then
then办法是提供给Promise实例对象应用的办法,通过then能够获取promise的执行后果,这个办法里的执行须要等到主线程执行实现之后才执行,属于微工作。
onResolved 示意胜利的执行办法,通常写成 value => { }
onRejected 示意失败的执行办法,通常写成 reason => { }

const promise = new Promise((resolve, reject)=>{    setTimeout(()=>{          resolve(1)     }, 1000)})promise.then(    value => { console.log('胜利', value)},    reason => { console.log('失败', reason)} )// 执行后果--- 胜利 1

(3) Promise.prototype.catch
catch是提供给Promise实例对象应用的办法,通过catch来解决失败,解决失败的办法有两种,一种是通过下面的then办法,对每次的promise执行定义解决胜利和解决失败的函数,第二种就是间接应用catch办法,能够进行一个谬误穿透,不须要每次在then里定义失败的解决办法

const promise = new Promise((resolve, reject)=>{    setTimeout(()=>{          reject(0)     }, 1000)})promise.then(    value => { console.log('胜利', value)}).catch(    error => { console.log('error', error)})// 执行后果--- error 0

(4) Promise.resolve
定义在构造函数Promise本身的办法,不须要创立实例对象,可间接返回执行胜利

Promise.resolve(2).then(value=>{    console.log('胜利', value)})// 执行后果--- 胜利 2

(5)Promise.reject
定义在构造函数Promise本身的办法,不须要创立实例对象,可间接返回执行胜利

Promise.reject(-1).then(value=>{    console.log('胜利', value)}).catch(error=>{    console.log('error', error)})// 执行后果--- error -1

(6) Promise.all
定义在构造函数Promise本身的办法,接管一个由promise实例组成的数组,当所有的promise都执行实现且胜利才会返回胜利(result为胜利数据的数组),只有有一个失败就会返回失败。

const p1 = new Promise((resolve, reject)=>{    setTimeout(()=>{         resolve(1)     }, 2000)})const p2 = new Promise((resolve, reject)=>{    setTimeout(()=>{         resolve(2)     },1000)})Promise.all([p1,p2]).then(value=>{    console.log('value', value) })// 2s后输入,执行后果--- value [1, 2]

(7) Promise.race
定义在构造函数Promise本身的办法,和all一样,接管由promise实例组成的数组,区别在于,race办法是进行promise实例执行办法速度的比拟,返回最快实现的异步操作

const p1 = new Promise((resolve, reject)=>{    setTimeout(()=>{        resolve(1)     }, 2000)})const p2 = new Promise((resolve, reject)=>{      setTimeout(()=>{         resolve(2)     },1000)})Promise.race([p1,p2]).then(value=>{    console.log('value', value)})// 2s后输入,执行后果--- value 2

二、async和await
async和await合并应用,能够让promise的调用更加的简洁,看上去就像是同步的。
(1) async润饰函数,函数执行的返回值是一个promise对象,后果由函数的返回值决定,当没有返回值或者返回任意非promise的值时,状态为胜利,当返回promise,由返回的promise里的执行的后果决定。
另外,async可不与await一起应用,但await必须在async 函数中应用

(2) await后跟表达式,能够是promise,也能够跟非promise,当前面的表达式是promise时,await + 表达式的后果为promise的执行后果,当表达式不是promise时,await + 表达式的后果为表达式本身。

(3) await的执行须要放在try catch外面进行谬误的捕捉,如果没有捕捉谬误,那么出错了代码就不能向下进行
格局如:

try {   // await的执行代码} catch(error){  // 谬误的解决代码}