ecmascript中Promise和async/await的区别

在学习前端过程中一直没弄明白这个,后面问了AI后才明白。

特性 Promise async/await
语法 链式调用 .then().catch() 类似同步代码的写法
错误处理 使用 .catch()或第二个参数 使用 try-catch
可读性 回调地狱风险 代码更清晰易读
调试 调试相对复杂 调试更方便,有同步代码的感觉
javascript 复制代码
// Promise 方式
function getUserData(userId) {
    return fetchUser(userId)
        .then(user => fetchProfile(user.id))
        .then(profile => fetchPosts(profile.userId))
        .then(posts => {
            console.log('所有数据获取完成');
            return posts;
        })
        .catch(error => console.error('出错:', error));
}

// async/await 方式
async function getUserDataAsync(userId) {
    try {
        const user = await fetchUser(userId);
        const profile = await fetchProfile(user.id);
        const posts = await fetchPosts(profile.userId);
        console.log('所有数据获取完成');
        return posts;
    } catch (error) {
        console.error('出错:', error);
    }
}

重要关系

  • async 函数总是返回一个 Promise

  • await 只能在 async 函数中使用

  • await 后面可以跟任何 thenable 对象(主要是 Promise)

javascript 复制代码
async function example() {
    return 'hello'; // 自动包装成 Promise
}

// 等价于
function example() {
    return Promise.resolve('hello');
}

总结

  • Promise​ 是处理异步操作的底层机制

  • async/await​ 是基于 Promise 的语法糖,让代码更易读写

  • 两者可以混合使用,根据场景选择最合适的写法

  • 现代 JavaScript 开发中,推荐使用 async/await 来提高代码可读性

https://blog.csdn.net/zlpzlpzyd/article/details/148035513

相关推荐
Highcharts.js几秒前
Highcharts React v4 迁移指南(上):核心变更解析与升级收益
前端·javascript·react.js·react·数据可视化·highcharts·v4迁移
SuniaWang6 分钟前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题八:《RAG 系统安全与权限管理:企业级数据保护方案》
java·前端·人工智能·spring boot·后端·spring·架构
菌菌的快乐生活13 分钟前
在 WPS 中设置 “第一章”“第二章” 这类一级编号标题自动跳转至新页面
前端·javascript·wps
南 阳29 分钟前
Python从入门到精通day56
开发语言·python
m0_5698814735 分钟前
C++中的组合模式高级应用
开发语言·c++·算法
hh随便起个名40 分钟前
useRef和useState对比
前端·javascript·react
m0_7301151140 分钟前
高性能计算负载均衡
开发语言·c++·算法
Hello_Embed1 小时前
LVGL 入门(十五):接口优化
前端·笔记·stm32·单片机·嵌入式
孞㐑¥1 小时前
算法—记忆化搜索
开发语言·c++·经验分享·笔记·算法
xushichao19891 小时前
代码覆盖率工具实战
开发语言·c++·算法