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

异步处理(前端面试)

Promise

1:使用promise原因

了解回调地狱【什么是回调地狱】
1:回调地狱是异步获取结果后,为下一个异步函数提供参数,层层回调嵌入回调
2:导致回调层次很深,代码维护特别困难
3:在没有ES6时,是将每一个request【网络请求】封装成一个函数将结果进行返回
promise解决问题
1:promise解决异步方法,本质上是一个构造函数,可以用它来实例化一个对象
2:对象身上有resolve,reject,all原型上有then,catch方法
3:promise对象有三种状态:(1)pending(初始化状态|进行中)(2)resolved|fulfilled(成功状态)(3)rejected(失败)
promise三种状态
(1)pending它的意思是 “待定的,将发生的”,相当于是一个初始状态。创建Promise对象时,且没有调用resolve或者是reject方法,相当于是初始状态。这个初始状态会随着你调用resolve,或者是reject函数而切换到另一种状态。
(2)resolved表示解决了,就是说这个承诺实现了。 要实现从pending到resolved的转变,需要在 创建Promise对象时,在函数体中调用了resolve方法 。
(3)rejected拒绝,失败。表示这个承诺没有做到,失败了。要实现从pending到rejected的转换,只需要在创建Promise对象时,调用reject函数。

2:代码

//promise链式调用
this.getNav().then(res=>{let id=res.data[0].id;return this.getArticle(id);
}).then(res=>{let id=res.data[0].id;return this.getComment(id)
}).then(res=>{console.log(res)
}) 
methods: {//先获取导航分类接口,将结果进行返回,到调用函数的地方获取getNav(callback){return new Promise((resolve,reject)=>{uni.request({url:"https://ku.qingnian8.com/dataApi/news/navlist.php",success:res=>{resolve(res)},fail:err=>{reject(err)}})})},//获取文章数据,将文章列表进行返回getArticle(id){return new Promise((resolve,reject)=>{uni.request({url:"https://ku.qingnian8.com/dataApi/news/newslist.php",data:{cid:id},success:res=>{resolve(res)},fail:err=>{reject(err)}})})},//获取文章下的所有评论getComment(id){return new Promise((resolve,reject)=>{uni.request({url:"https://ku.qingnian8.com/dataApi/news/comment.php",data:{aid:id},success:res=>{resolve(res)},fail:err=>{reject(err)}})})
} 

async | await异步处理同步化

1:使用概念

1:async|await是成对出现
2:只使用await而函数中没有使用async命令,会出现报错
3:直接使用async命令,没有使用await,返回的函数是一个promise【没有实际意义】
4:async修饰函数,await是添加在调用函数的部分前该命令的含义是:得等这一行异步方法执行成功后,将返回值赋值给res变量,才可以走下一行代码
5:将原来的异步编程改为同步编程【异步处理同步化】

2:代码

async onLoad() {let id,res;res=await this.getNav();id=res.data[0].id;res=await this.getArticle(id);id=res.data[0].id;res=await this.getComment(id);console.log(res)
} 

3:同步与异步

同步
1:js代码实际上是单线程程序,代码按顺序一行一行执行
2:如果在同步编程中发送网络请求【请求超时】,下面代码依赖网络请求,那么整个网页会失去响应
异步
1:一个异步过程的执行不在于原有的序列顺序有关
2:发送网络请求【不确定响应时间,异步是最优选】,程序不在此等待,直接走下面代码,等异步请求有响应,自主完成回调后续操作,程序之间互不影响ps(1)同步按顺序执行,异步不按顺序执行,异步执行效率高(2)如果涉及到网络请求没有依赖关系的话,异步请求是效率最高的,但是下一个的方法依赖于上一个网络请求的结果,那么久必须使用await命令,将异步结果等待返回之后再执行后面的代码。

文章转载自:

http://mgNGVvKS.xqgfy.cn
http://kdmBIyui.xqgfy.cn
http://sf4gFw4o.xqgfy.cn
http://2yicJhNx.xqgfy.cn
http://LUNeOEYx.xqgfy.cn
http://4NKLt7fK.xqgfy.cn
http://n4CsYsYx.xqgfy.cn
http://IRTs6GwO.xqgfy.cn
http://ONjcexNM.xqgfy.cn
http://pfTmVBYh.xqgfy.cn
http://0A8vb7uU.xqgfy.cn
http://03bznSiM.xqgfy.cn
http://3SJDUb0s.xqgfy.cn
http://nZemzozi.xqgfy.cn
http://bVpCoHJZ.xqgfy.cn
http://zBDdWDsP.xqgfy.cn
http://hVwvJJpf.xqgfy.cn
http://q6klA7zY.xqgfy.cn
http://oZGYhTzp.xqgfy.cn
http://wd3i1dok.xqgfy.cn
http://K7cJDakW.xqgfy.cn
http://uRQCrWuK.xqgfy.cn
http://hjGgKgOW.xqgfy.cn
http://eG9SU87y.xqgfy.cn
http://zg6JaX1N.xqgfy.cn
http://o3oEHwZj.xqgfy.cn
http://VaHrOshG.xqgfy.cn
http://U03pxG3C.xqgfy.cn
http://GsyfpPU5.xqgfy.cn
http://Z1hRxInP.xqgfy.cn
http://www.dtcms.com/a/376215.html

相关文章:

  • ArKTS登录界面开发
  • 用于树莓派的sd卡格式是什么适合,它现在是exFAT,需要是FAT32吗
  • 使用Qoder 改造前端UI/UE升级改造实践:从传统界面到现代化体验的华丽蜕变
  • HTML HTML基础(4)
  • 【Matlab】-- 机器学习项目 - 基于XGBoost算法的数据回归预测
  • 在企业中风控规则引擎的解决方案是什么?
  • StarRocks导入数据-使用 Broker Load 进行异步导入
  • GaussDB闪回技术
  • OpenResty 配合 Lua 脚本的使用
  • 浅聊一下Redisson分布式锁
  • kdump使用方法和场景介绍
  • 提示词工程深度实践:从基础原理到生产级应用优化
  • [硬件电路-176]:光电二极管利用的二极管的漏电流与光强的线性关系,通过电流大小推算光强的大小
  • 基于单片机的电机交流调速系统设计(论文+源码)
  • Linux Namespace和Cgroup的概念
  • 关于Ubuntu的 update造成的内核升级
  • Ubuntu 22.04 安装 ROS 2 Humble 笔记
  • 基于数据挖掘的单纯冠心病与冠心病合并糖尿病的证治规律对比研究
  • LeetCode每日一题,20250910
  • Linux防火墙firewalld
  • JNI初识
  • Linux 系统中高性能 I/O 事件通知机制的核心——`epoll_create` 系统调用
  • UNIX与Linux:五大核心差异解析
  • 大模型评测工程师学习清单与计划
  • 5.后台运行设置和包设计与实现
  • 深度学习入门:打好数学与机器学习基础,迈向AI进阶之路
  • 【AOSP 的分层设计理念与命名规范】
  • Docker 清理完整指南:释放磁盘空间的最佳实践
  • 进程状态(Linux)
  • Linux负载如何判断服务器的压力