当前位置: 首页 > news >正文

在 ArkTS 中,Promise 的使用比 TypeScript 更严格(必须显式指定泛型类型)

在 ArkTS 中,Promise的使用比 TypeScript 更严格(必须显式指定泛型类型)。以下是完整用法:

1. 基本创建

// ✅ 显式指定泛型类型constp1=newPromise<string>((resolve,reject)=>{resolve('success');// 类型必须是 string});constp2=newPromise<void>((resolve)=>{setTimeout(()=>resolve(),1000);// 无返回值用 void});

2. 链式调用

fetchData().then((data:string)=>{// 类型必须标注returndata.toUpperCase();}).then((upper:string)=>{console.log(upper);}).catch((err:Error)=>{// 错误类型建议标注console.error(err);}).finally(()=>{// finally 无参数console.log('done');});

3. 静态方法

// Promise.resolve - 必须带泛型constresolved=Promise.resolve<string>('ok');// Promise.reject - 必须带泛型constrejected=Promise.reject<never>(newError('fail'));// Promise.all - 所有泛型都要显式写const[a,b]=awaitPromise.all<string,number>([Promise.resolve<string>('hello'),Promise.resolve<number>(42)]);// Promise.allSettledconstresults=awaitPromise.allSettled<string,number>([Promise.resolve<string>('ok'),Promise.reject<number>(newError('fail'))]);// Promise.raceconstwinner=awaitPromise.race<string,number>([fetchString(),// Promise<string>fetchNumber()// Promise<number>]);// Promise.anyconstfirstSuccess=awaitPromise.any<string,number>([Promise.reject<string>(newError('fail1')),Promise.resolve<number>(123)]);

4. 与 async/await 配合

asyncfunctionfetchUser():Promise<User>{// 返回类型必须写try{constresponse=awaithttpRequest();// await 正常用returnresponseasUser;}catch(error){// 错误处理throwerror;}}

5. 泛型嵌套(注意层层标注)

// Promise 里包 Promiseconstnested=Promise.resolve<Promise<string>>(Promise.resolve<string>('deep'));// 数组类型constlist=Promise.resolve<Array<string>>(['a','b','c']);

6. 鸿蒙特定 API 中使用

import{promptAction}from'@kit.ArkUI';import{http}from'@kit.NetworkKit';// 把回调式 API 包装为 PromisefunctionshowDialog():Promise<boolean>{returnnewPromise<boolean>((resolve)=>{promptAction.showDialog({message:'确定删除?',buttons:[{text:'确定'},{text:'取消'}]},(err,result)=>{resolve(result.index===0);});});}

关键规则总结

规则说明
泛型必须显式new Promise<T>()Promise.resolve<T>(),T 不能省略
回调参数标注.then((val: Type) => ...)建议标注类型
async 返回类型async function(): Promise<T>必须写
无返回值用 voidnew Promise<void>()

一句话记忆:ArkTS 中只要看到<>,里面的类型必须你自己写,编译器绝不帮你猜。

http://www.jsqmd.com/news/510490/

相关文章:

  • 2026年比较好的分散乳化泵品牌推荐:均质乳化泵/多级乳化泵/磷酸铁锂均质乳化泵实力厂家是谁 - 品牌宣传支持者
  • 2026年质量好的耐摔滚塑航空箱厂家推荐:防摔滚塑航空箱/空投滚塑航空箱/耐高低温滚塑航空箱值得买的厂家 - 品牌宣传支持者
  • 开箱即用!深度学习训练环境镜像部署与模型训练实战教程
  • 2026年6月PMP考试,真的是“末班车”了,马上第八版教材更新!
  • 精选优质2026江苏/浙江混凝土化粪池源头厂家推荐:无锡鸿瀚建材 - 栗子测评
  • OpenClaw安全指南:GLM-4.7-Flash本地化部署的权限控制
  • 腾讯版的WorkBuddy接入微信指南,用微信遥控电脑AI干活
  • 2026年比较好的南通智能清便护理设备厂家推荐:南通大小便失禁护理设备厂家热卖产品推荐(近期) - 品牌宣传支持者
  • 2026年知名的管链输送机设备厂家推荐:山东垂直管链输送机/山东粉末管链输送机厂家热销推荐 - 品牌宣传支持者
  • 工业数字化服务商:重塑制造生态的隐形推手
  • 人工智能论文助手测评:9款工具显著缩短研究周期
  • 计算机的数字表示-无符号数与补码
  • Qwen-Image作品分享:基于RTX4090D的Qwen-VL在无障碍阅读设备中的落地成果
  • Ostrakon-VL-8B快速入门:3分钟搭建视觉理解系统,支持单图多图分析
  • 【How Far Are We From AGI】4 AGI的“生理系统“——从算法架构到算力基座的工程革命
  • Rodrigues旋转矩阵推导
  • UG CAM API 获取、设置切削层中的切削方式类型方法,如设置仅底面、恒定、临界深度的类型
  • 2026年热门的智能护理床品牌推荐:南通智能护理床/南通多功能护理床厂家汇总与采购指南 - 品牌宣传支持者
  • Eclipse 常用功能
  • Qwen3-32B-Chat效果展示:金融研报关键数据抽取+可视化图表建议生成
  • 2026年快速拿证的驾校品牌推荐:威海摩托车驾校学员推荐 - 品牌宣传支持者
  • Android滚动选择器架构深度解析:WheelPicker的技术实现与设计哲学
  • openclaw优化Token消耗攻略
  • 二进制消息保护技术:RevokeMsgPatcher的原理与应用
  • 如何快速上手 Uppload:零后端图片上传与编辑神器完全指南
  • 2026年质量好的无尘拆包机厂家推荐:吨袋拆包机/吨袋拆包机设备/自动吨袋拆包机高评价厂家推荐 - 品牌宣传支持者
  • LoRA训练助手从零开始:Qwen3-32B模型适配与Gradio界面调优指南
  • 西门子PLC S1500新能源Pack线程序集成(含触摸屏与梯形图FB应用)学习范例
  • Qwen3-ASR-1.7B性能实测:10秒处理5小时音频的黑科技
  • 数字孪生怎么帮助制造业降低生产成本?真实案例解析