async的MDN文档promise
1. async函数的返回值为promise对象 2. async函数返回的promise的结果由函数执行的结果决定
async function fn1() { return 1 } console.log(fn1())的输出结果为Promise类型
async function fn1() { return 1 //成功的value为1的promise throw 2 //失败的reason为2的promise return Promise.reject(3) //失败的reason为3的promise return Promise.resolve(3) //成功的reason为3的promise return new Promise((resolve, reject) => { resolve(4) //成功的value为4的promise reject(4) //失败的reason为4的promise }) }
await的MDN文档async
1. await右侧的表达式通常为promise对象, 但也能够是其它的值 2. 若是表达式是promise对象, await返回的是promise成功的值 3. 若是表达式是其它值, 直接将此值做为await的返回值 4. 若是await的promise失败了, 就会抛出异常, 须要经过try...catch来捕获处理 5. await必须写在async函数中, 但async函数中能够没有await
function fn2() { return new Promise((resolve, reject) => { resolve(1) }) } function fn3() { return 3 } function fn4() { return new Promise((resolve, reject) => { reject(2) }) } //函数体内有await,函数声明是必须有async,可是async函数内没必要须有await (async function(){ const r1 = await fn2() console.log(r1) //输出结果为1,并不表明fn2的返回值是1,而是说fn2()返回一个成功的value为1的promise,await的返回值是promise的成功的value const r2 = await fn3() console.log(r2) //输出结果为3,await右侧的表达式是非promise,直接此值返回 const r3 = await fn4() console.log(r3) //uncaught异常,若是await右侧返回是一个失败的promise,则须要使用try...catch来捕获异常 try { await fn4() } catch(error) { console.log(error) //输出结果为2 } })()