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

ES6 Promise的用法,async/await异步处理同步化

文章目录

  • 一、什么是promise ?
  • 二、await / async ES7的新规范,异步处理同步化


一、什么是promise ?

在这里插入图片描述

promise是解决异步的方法,本质上是一个构造函数,可以用它实例化一个对象。对象身上有resolve、reject、all,原型上有then、catch方法。promise对象有三种状态:pending(初识状态/进行中)、resolved或fulfilled(成功)、rejected(失败)

  1. pending。它的意思是 “待定的,将发生的”,相当于是一个初始状态。创建Promise对象时,且没有调用resolve或者是reject方法,相当于是初始状态。这个初始状态会随着你调用resolve,或者是reject函数而切换到另一种状态。

请添加图片描述

  1. resolved。表示解决了,就是说这个承诺实现了。 要实现从pending到resolved的转变,需要在 创建Promise对象时,在函数体中调用了resolve方法
    请添加图片描述

  2. rejected。拒绝,失败。表示这个承诺没有做到,失败了。要实现从pending到rejected的转换,只需要在创建Promise对象时,调用reject函数。

请添加图片描述

看上面的引用,promise就是用来解决异步的方法,光看上面的解释可能不懂什么意思,但是它后面说的实例化对象后端方法,你肯定用过,如then、catch等,通过以下代码打印一下他里面的方法。

console.dir(Promise)

浏览器打印结果:

请添加图片描述
下面就通过promise实例化,完成对上面回调地狱函数进行重构

//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)
})

二、await / async ES7的新规范,异步处理同步化

这两个命令是成对出现的,如果使用await没有在函数中使用async命令,那就会报错,如果直接使用async没有使用await不会报错,只是返回的函数是个promise,可以,但是没有意义,所以这两个一起使用才会发挥出它们本身重要的作用。

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)
} 

可以看到onload是函数,这个函数必须有async命令,在调用函数的部分,前面都加了一个await,这个命令的意思就是等这一行的异步方法执行成功后,将返回的值赋值给res变量,然后才能再走下一行代码,这就是将原来的异步编程改为了同步编程,这就是标题提到的“异步处理,同步化”,


参考:
咸虾米_https://www.bilibili.com/read/cv18799030


http://www.kler.cn/news/155584.html

相关文章:

  • JOSEF电流继电器 DL-33 整定范围0.5-2A 柜内安装板前接线
  • CAP BASE理论
  • Fisher信息理论与应用
  • 速速收藏!纯C实现的MD5哈希校验算法~!
  • VSCode修改C++版本
  • LoRaWAN协议栈LoRaMac-Node版本变迁历史(最新4.7.0)
  • 【计算机网络学习之路】URL概念及组成
  • 产品学习之路(一)
  • Leetcode 2954. Count the Number of Infection Sequences
  • 上门按摩APP小程序,抓住机遇创新服务新模式;
  • c语言常见面试题(持续更新)
  • LeetCode | 二叉树的前中后序遍历
  • C语言练习题
  • Bootstrap 5 中文文档 (简体中文)
  • JUC-AQS
  • 如何在 vue 项目中创建 svg 组件
  • 国标GB28181协议/RTSP视频监控汇聚平台EasyCVR(V.3.4)页面UI大更新
  • 【代码随想录算法训练营-第二天】【数组】977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
  • Vue中mvvm的作用
  • SpringCloudAlibaba微服务 【实用篇】| Nacos配置管理
  • 【LangChain实战】开源模型学习(2)-ChatGLM3
  • React如何检查组件性能
  • 使用Pytoch实现Opencv warpAffine方法
  • sourceTree的下载和安装
  • java高校实验室排课学生考勤系统springboot+vue
  • 【数据结构高阶】AVL树
  • 跟着GPT学习shell脚本,理论与实践相结合的学习计划。
  • 页面表格高度自适应
  • UIkit-UIAlertContent
  • Django之ORM