1 async
async 将 function 变为成为 async 函数
●async 内部可以使用 await,也可以不使用,因此执行这个函数时,可以使用 then 和 catch 方法
●async 函数的返回值是一个 Promise 对象
●Promise 对象的结果由 async 函数执行的返回值决定
async function funcName() { • //statements }
○函数体不 return 返回值,则 async 函数返回值为一个成功 fulfilled 的 Promise 对象,值为 undefined
let a = async function() {} let res = a() console.log(res) // Promise{<fullfilled>: undefined}
○return 结果不是一个 Promise ,则 async 函数返回值为一个成功 fulfilled 的 Promise 对象,状态值为这个内部返回值
let a = async function () { return 'hello' } let res = a() console.log(res) // Promise{<fullfilled>: 'hello'}
○内部抛出错误,则 async 函数返回值为一个失败 reject 的 Promise 对象
let a = async function foo() { throw new Error('出错了') } a().then(()=>{console.log("ok");},()=>{console.log("error");}) //456
2 await await 相当于一个运算符,右边接一个值。一般为一个 Promise 对象,也可以是一个非 Promise 类型。 ●当右接一个非 promise 类型,await 表达式返回的值就是这个值;当右接一个 promise 对象,则 await 表达式会阻塞后面的代码,等待当前 promise 对象 resolve 的值 综合 async 和 await 而言 ●await 必须写在 async 函数中 ●await 右侧的表达式一般为 promise 对象 ●await 返回的是 promise 成功的值
async function f1(){console.log(1);let x = await Promise.resolve("2")console.log("x:"+x); }let res = f1();console.log(res);