🌟 鸿蒙 ArkTS 开发:Promise 和 async/await 的相声剧场 🎤
大家好!今天我是你们的"代码说书人",来聊聊鸿蒙 ArkTS 开发中的两位异步巨星------Promise 和 async/await!它们就像相声里的"逗哏"和"捧哏",一个负责搭台子,一个负责唱大戏~
🎭 第一幕:Promise------"我承诺!"(逗哏出场)
Promise 的内心戏 :
"我承诺(Promise)未来会给你一个结果!要么成功(resolve),要么失败(reject),绝不让你干等着!"
typescript
// Promise 的基本款
function 泡面() {
return new Promise<string>((resolve, reject) => {
setTimeout(() => {
const 煮糊了 = Math.random() > 0.5;
煮糊了
? reject("💥 糊了!黑炭面出锅!")
: resolve("🍜 香喷喷的泡面完成!");
}, 3000);
});
}
// 调用方式
泡面()
.then(面 => console.log("开吃:" + 面))
.catch(事故 => console.log("外卖电话:" + 事故));
Promise 绝活 :
✅ 自带 .then()
接成功
✅ 自带 .catch()
接翻车
✅ 自带 .finally()
收尾打扫现场
🎩 第二幕:async/await------"我等你!"(捧哏亮相)
async/await 的内心戏 :
"Promise 哥你先忙,我在这优雅地等(await)着你,代码看起来像同步,实际是异步,逼格瞬间提升!"
javascript
async function 优雅吃面() {
try {
console.log("烧水中...");
const 面 = await 泡面(); // 暂停!等泡面
console.log("优雅开吃:" + 面);
} catch (厨房事故) {
console.log("点外卖:" + 厨房事故);
} finally {
console.log("洗碗机启动!");
}
}
// 调用就像调函数
优雅吃面();
async/await 三大绝技 :
1️⃣ async
:标记函数内有异步操作
2️⃣ await
:暂停等 Promise 出结果
3️⃣ try/catch
:同步方式处理错误
🤼 第三幕:最佳拍档的使用场景
场景 1️⃣:需要"顺序操作"(等泡面才能吃)
javascript
async function 做饭流程() {
const 饭 = await 煮饭();
const 菜 = await 炒菜(); // 等饭好了才炒菜
return 饭 + 菜;
}
场景 2️⃣:需要"并行操作"(饭和菜同时做)
javascript
async function 高效做饭() {
const [饭, 菜] = await Promise.all([煮饭(), 炒菜()]);
return "开饭啦!" + 饭 + 菜;
}
场景 3️⃣:网络请求(经典组合拳)
javascript
async function 获取用户数据() {
try {
const 响应 = await axios.get("https://api/user");
return 响应.data;
} catch (错) {
console.log("网络开小差了", 错);
return null;
}
}
🥊 对战回合:Promise vs async/await
招式 | Promise | async/await |
---|---|---|
代码风格 | 链式调用(.then.then) | 同步写法(不用缩进到怀疑人生) |
错误处理 | .catch() 单独处理 | try/catch 统一捕获 |
可读性 | 复杂操作像"俄罗期套娃" | 像读故事书一样流畅 |
适用场景 | 简单异步操作 | 复杂异步流程(尤其多层依赖) |
💡 终极大招:黄金搭档使用口诀
函数前面加
async
Promise 前加
await
错误要用
try/catch
并行请用
Promise.all
记住这口诀,你就是鸿蒙异步界的郭德纲!
🎬 大结局:一句话总结
Promise 是底层的承诺 (异步契约)
async/await 是优雅的等待 (语法糖衣)
两者配合使用,让异步代码写起来像同步一样美!
下次你的代码遇到"等待烦恼",记得请出这对相声组合------让Promise搭台子,async/await唱戏,保证观众(代码)掌声雷动!👏