async和await
一、async函数返回值都是Promise对象
二、promise.then 成功的情况 对应await
三、promise.catch 失败的情况 对应try…catch
一、async函数返回值都是Promise对象
1、返回值不是promise对象,那么新promise的状态为fullfilled,结果为返回的结果,不写return默认是 return undefined
async function test() { return 100 } const result = test() console.log(result) // 状态为fullfilled,结果为100
async function test() {} const result = test() console.log(result) // 状态为fullfilled,结果为undefined
2、返回值是promise对象,新promise的状态和结果为返回的状态和结果
async function test() { return new Promise((res, rej) => { res(100) }) } const result = test() console.log(result) // 状态为fullfilled,结果为100
同上:
async function test() { return Promise.resolve(100) } const result = test() console.log(result) // 状态为fullfilled,结果为100
async function test() { return Promise.reject() } const result = test() console.log(result) // 状态为rejected,结果为100
3、抛出异常,新promise的状态为rejected,结果为抛出的值
async function test() { throw new Error('错误') } const result = test() console.log(result) // 状态为rejected,结果为Error: 错误
二、promise.then 成功的情况 对应await
1、await表达式后跟的是promise时,
若promise状态为fullfilled:
async function test() { const p = Promise.resolve(100) p.then((res) => { console.log(res) // 100 }) const res = await p console.log(res) // 100 return res } const result = test() console.log(result) // 状态为fulfilled,结果为100,没有写return默认为return undefined
若promise状态为rejected,需要用try…catch捕获:
async function test() { const p = Promise.reject(100) try { const res = await p console.log(res) } catch (e) { console.log('err', e) // err 100 return e } } const result = test() console.log(result) // 状态为fulfilled,结果为100
2、await后跟的是其他值,将该值作为await的返回值
async function test() { const res = await 100 // 内部会封装成 await Promise.resolve(100) console.log(res) return res } const result = test() console.log(result) // 状态为fulfilled,结果为100
3、await后跟的是一个异步函数,将该函数的返回值作为await的返回值
async function fn() { return 1 } async function test() { const res = await fn() console.log(res) return res } const result = test() console.log(result) // 状态为fulfilled,结果为1
三、promise.catch 失败的情况 对应try…catch
async function test() { const data = await Promise.reject(100) console.log(data) } const s = test() // Uncaught (in promise) 100 console.log(s) // 未使用try...catch捕获,状态为rejected,结果为100 async function test1() { try { const data = await Promise.reject(100) console.log(data) } catch (e) { console.log('err', e) // err 100 return e } } const result = test1() console.log(result) // 状态为fullfilled,结果为100。catch中不写return默认是return undefined
分类:
ES6
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结