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

js async

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>debugger VM演示</title> </head> <body> <script> // 业务逻辑:改成异步,模拟长时间业务,不会一瞬间跑完 async function business(){ console.log("业务正在执行......"); // 模拟业务持续15秒,不会一次性跑完 for(let n=0;n<15;n++){ await new Promise(resolve=>setTimeout(resolve,1000)); console.log("业务运行中,已经过",n+1,"秒"); } console.log("业务执行完毕"); } // 反调试定时器,每4秒触发,new Function产生VM debugger setInterval(function(){ const fn = new Function(` debugger; console.log("我是VM脚本里面的debugger"); `); fn(); },4000); //启动业务 business(); </script> </body> </html>

asyncawait是 JS 处理异步代码的语法糖,本质是基于Promise,解决回调地狱,把异步代码写得像同步一样。

异步:不会等一件事做完,直接往下执行,比如请求接口、读取文件、定时器。

1. async 关键字

写在函数前面,这个函数就变成异步函数:

  1. 函数返回值自动包装成Promise对象
  2. 函数内部才可以使用await,普通函数不能写 await
// 加上 async async function test(){ return 100; } // 返回的是 Promise,不是直接 100 console.log(test()) // Promise { 100 } test().then(res=>console.log(res)) // 100

2. await 关键字

只能写在 async 函数里面!不能在普通函数、全局直接用作用:等待 Promise 执行完成,拿到结果,再往下走代码

//模拟一个异步请求 function fetchData(){ return new Promise((resolve)=>{ setTimeout(()=>{ resolve("接口返回的数据"); },2000) }) } async function run(){ console.log("开始"); // 在这里等待2秒,拿到结果再执行下一行 let res = await fetchData(); console.log(res); // 接口返回的数据 console.log("结束"); } run();

执行顺序: 1. 打印开始2. 等待 2 秒 3. 拿到数据打印接口返回的数据4. 打印结束

如果不加 await:不会等待,res 拿到的是一个 Promise 对象,不是真实数据。

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

相关文章:

  • 国家中小学智慧教育平台电子课本下载工具:三步实现教育资源高效管理
  • 基于 RK3588 的多输入视频 AI 推理流水线:YOLO 车牌检测、OCR、WebRTC 推流与边缘联动
  • Deskreen屏幕共享终极指南:3分钟快速上手多屏协作
  • 2026高性价比树洞测评!零隐形消费情绪陪伴平台 - nuanyin
  • DirBridge:从远程文件管理到内嵌 SSH 终端
  • 冷暖一体机哪个品牌适合自建房安装:【芬尼】自建房优选 - 17328623207
  • 计算机毕业设计基于知识图谱(Neo4j)和大语言模型(LLM)的图检索增强(GraphRAG)的地质矿产知识管理智能问答系统 人工智能 大模型毕业设计(源码+文档+PPT+讲解)
  • Hive性能调优实战:从基础配置到高级技巧
  • 有哪些靠谱、不容易翻车的 AI 毕业论文辅助工具推荐?
  • 卷积神经网络(CNN)原理详解:从核心组件到PyTorch实战
  • 如何用Teable在5分钟内搭建企业级数据协作平台?终极指南
  • H3C交换机Console登录与SSH远程管理配置全流程详解
  • 玩客云(S805)刷 Armbian + CasaOS 完整全流程
  • Python数据分析实战:从增速放缓预测内容增长潜力
  • 大户型家用冷暖系统推荐哪个品牌:【芬尼】大户型适配 - 17728181569
  • SM2是中国国家密码管理局发布的基于椭圆曲线密码学(ECC)的非对称加密算法标准
  • 嵌入式系统时钟配置实战:从原理到低功耗调试全解析
  • php8 常量折叠
  • 构建可回退的30天模型验收流程:平衡创新与稳定的工程实践
  • 从ChatGPT提示词到Shopify商品页:AI模板产品化全链路拆解(含自动交付系统部署脚本)
  • 跨境电商图片翻译工具推荐:批量处理视频字幕与抠图
  • php的结构是什么?
  • GameFramework-Next:解决Unity游戏开发痛点的下一代框架
  • 网约车平台分账架构实践:网约车小程序如何解决司机结算、二清与延迟分账难题
  • 3步搞定漫画翻译:BallonsTranslator智能翻译工具完全指南
  • 现在好用的 AI 论文写作工具有哪些品牌?聊聊真实使用体验
  • 每日一句 | 这音乐永不老去——当代码遇上诗意,谈谈那句触动灵魂的英文乐评
  • Android开发构建工具链版本对齐:AGP、Gradle、JDK与Android Studio兼容性全解析
  • Windows下Python C扩展编译错误:cl.exe失败原因与解决方案
  • LEFT JOIN与INNER JOIN性能深度对比:从执行计划到实战优化