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

相关推荐
阡陌数智3 分钟前
RAG 系统的召回退化:向量库、分块、重排全链路问题排查与优化实践
开发语言·人工智能·语言模型·自然语言处理·推荐算法
莪_幻尘6 分钟前
Agent 体检:乱编、连锁、失忆,给 Agent 做一次五维体检
前端·人工智能·agent
geovindu12 分钟前
rust: Flyweight Pattern
开发语言·后端·设计模式·rust·享元模式·结构型模式
秋天的一阵风18 分钟前
🚀 nacos-web-config:运营半夜改条配置,网页秒更新 —— 不用发版、不用轮询,我把它开源了
java·前端·开源
Escalating_xu30 分钟前
【C 语言】字符函数和字符串函数:从 ctype 到 strtok、strerror 全面解析
java·c语言·开发语言
不一样的少年_36 分钟前
别用前端思维写后端:一张 5MB 图片,为什么能撑爆内存?
前端·后端·图片资源
沐言人生38 分钟前
太吊了!这 2 款网盘工具,让我省 4000 大洋!
前端
鬼手点金42 分钟前
opencode-隐私优先配置
服务器·前端·javascript·bug·openclaw
涛涛ing1 小时前
4200万月活、85万行代码,Lovable用6个月把生产应用从Next.js迁到了TanStack Start
前端
悠仁さん1 小时前
【C++】auto
java·前端·c++