async 和 await
async 和 await
async
async函数返回一个promise对象,promise对象的结果由async函数执行的返回值决定。
语法:
async function fun(){}
let fun = async function(){}
不写return 或 只写return没有值 默认返回undefined
async函数返回的promise对象 状态:成功 结果:undefined
async function fn(){
// 函数不写return 或 只写return没有值 默认返回undefined
}
let result = fn()
// result 是一个成功的promise对象 状态:成功 结果:undefined
返回一个非promise类型的数据
async函数返回的promise对象 状态:成功 结果:返回值
async function fn(){
return 'ok'
}
let result = fn()
// result 是一个成功的promise对象 状态:成功 结果:'ok'
抛出错误
async函数返回的promise对象 状态:失败 结果:抛出内容
async function fn(){
throw '出错了!'
}
let result = fn()
// result 是一个失败的promise对象 状态:失败 结果:'出错了!'
返回一个promise对象
async function fn(){
return new Promise((resolve,reject)=>{
resolve('成功的值')
})
}
let result = fn()
// 如果 resolve('成功的值')
// result 是一个promise对象 状态:成功 结果:'成功的值'
// 如果 reject('失败的值')
// result 是一个失败的promise对象 状态:失败 结果:'失败的值'
我的理解:
如果async函数return的不是一个promise对象,那么返回结果会被加工成promise对象
如果async函数return的恰好是一个promise对象,那么返回结果就是这个promise对象
await
await 必须放在 async 函数中,async函数中 可以没有 await
async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。
await右边的表达式一般为promise对象,如果不是promise对象就直接返回对应的值。
await右边的表达式不为promise对象
async function fn(){
let result = await '123'
console.log(result) // 输出 '123'
}
fn()
await右边为promise对象
await返回promise对象 成功的值
const p = new Promise((resolve,reject)=>{
resolve('用户数据')
})
async function fn(){
let result = await p
console.log(result) // 输出 '用户数据'
}
fn()
如果promise对象失败就会 抛出错误 throw '失败的值'
const p = new Promise((resolve,reject)=>{
reject('出错了')
})
async function fn(){
// 使用try...catch捕获抛出的错误信息
try{
let result = await p // 这里检测到 p 的状态为失败,抛错,代码块中后面的代码不执行
console.log(result)
}catch(e){
console.log(e) // 输出 '出错了'
}
}
fn()
我的理解:
await promise对象
promise对象状态为成功 则 返回成功的值
promise对象状态为失败 则 抛出失败的值
本文来自博客园,作者:ycccc丶,转载请注明原文链接:https://www.cnblogs.com/imycc/p/16494694.html