Promise 介绍与基本使用 - 学习笔记

Promise 介绍与基本使用

  • 1、Promise 介绍与基本使用
      • Promise是什么?
        • 理解:
        • 为什么要用 Promise
        • `Promise` 的初体验 - 抽奖
        • `Promise` 初体验 - 文件读取(返回 Promise 对象)
  • 2、Promise 的状态
  • 3、Promise 对象的值
  • 3、Promise 关键问题
  • 4、Promise 自定义封装
  • 5、async 与 await

1、Promise 介绍与基本使用

Promise是什么?

理解:
  • 1、抽象表达:
    • 1、Promise是一门新的技术(ES6规范)
    • 2、Promise是 JS 中进行异步编程的新解决方案

    备注:旧方案是单纯使用回调函数

  • 具体表达:
    • 1、从语法上来说:Promise是一个构造函数
    • 2、从功能上来说:Promise对象用来封装一个异步操作并可以获取其成功/失败的结果值
为什么要用 Promise
  • 1、指定回调函数的方式更加灵活
    • 1、旧的:必须在启动异步任务前指定
    • 2、Promise:启动异步任务 => 返回 Promise 对象 => 给 Promise 对象绑定回调函数(甚至可以在异步任务结束后指定/多个)
  • 2、支持链式调用,可以解决回调地狱问题
    • 1、什么是回调地狱?
      • 回调函数嵌套调佣,外部回调函数异步执行的结果是嵌套的回调执行的条件
    • 2、回调地狱的缺点?
      • 不便于阅读
      • 不便于异常处理
    • 3、解决方案?
      • Promise 链式调用
Promise 的初体验 - 抽奖
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous"></head><body><div class="container"><h2 class="page-head">Promise 初体验</h2><button type="button" class="btn btn-primary" id="btn">点击抽奖</button></div><script>const btn = document.getElementById('btn')btn.addEventListener('click', function () {// Promise 形式实现const p = new Promise((resole, reject) => {// resole:解决,函数类型的参数 - 异步任务成功的时候调用// reject:拒绝,函数类型的参数 - 异步任务失败的时候调用// Promise 可以包裹一个异步任务setTimeout(() => {let n = Math.floor((Math.random() * 100) + 1)if (n <= 30) {// 成功 - 调用 resole   将 Promise 对象(p)的状态设置为 【成功】resole(n)} else {// 失败 - 调用 reject  将 Promise 对象(p)的状态设置为 【失败】reject(n)}}, 1000)})// 处理成功、失败的结果// 调用 .then() 方法,传入两个函数类型的参数.then((res) => {// 成功时候调用alert('恭喜你中奖了,奖品为:一台iphone 12 pro max!您的号码为:' + res)}, (err) => {// 失败时候调用alert('再接再厉!您的号码为:' + err)})})</script></body></html>
Promise 初体验 - 文件读取(返回 Promise 对象)
const fs = require('fs')// Promise 实现
function myReadFile(path) {// 翻译个 Promise 对象return new Promise((resolve, reject) => {fs.readFile(path, 'utf-8', (err, data) => {if (err) {reject(err)return}resolve(data)})})
}myReadFile('./test2.txt').then(data => {console.log('成功', data);
}, err => {console.log('失败', err);
})

2、Promise 的状态

  • 实例对象中的一个属性 PromiseState ,值为如下几种:
    • pending:未定义的
    • resolved / fullfilled:成功
    • rejected:失败
      在这里插入图片描述

3、Promise 对象的值

  • 实例对象中的另一个属性 PromiseResult
  • 作用:保存着对象 【成功/失败】的结果
    • resolve reject 能修改该属性的值 -

3、Promise 关键问题

4、Promise 自定义封装

5、async 与 await

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492411.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ZYNQ的PCIE高速数据采集卡的设计(三)硬件设计

采集卡硬件设计 3.1 引言 采集卡的硬件设计是实现采集功能的基础&#xff0c;良好的硬件设计可以使采集功能更容 易实现&#xff0c;方便软件开发。本章基于第二章的硬件设计方案来详细介绍采集卡硬件设计。 包括载卡和子卡的芯片的选型、配置和具体电路的设计。载卡和子卡…

提升Vue3应用效率的秘诀:深入比较ref与reactive!

ref 和 reactive 是 Vue3 中实现响应式数据的核心 API。ref 用于包装基本数据类型&#xff0c;而 reactive 用于处理对象和数组。尽管 reactive 似乎更适合处理对象&#xff0c;但 Vue3 官方文档更推荐使用 ref。 我的想法&#xff0c;ref就是比reactive好用&#xff0c;官方也…

关于纯前端想要变成全栈编写接口的学习推荐

推荐学习uniappuniclouduniadmin 学习成本低,不到一个月就能开发出自己的接口,上传到服务空间,并且能够实现后端的功能,能够调用接口 当然这里使用的不是mysql数据库,而是unicloud推荐的存储方式 操作起来也很方便

文件上传---->生僻字解析漏洞

现在的现实生活中&#xff0c;存在文件上传的点&#xff0c;基本上都是白名单判断&#xff08;很少黑名单了&#xff09; 对于白名单&#xff0c;我们有截断&#xff0c;图片马&#xff0c;二次渲染&#xff0c;服务器解析漏洞这些&#xff0c;于是今天我就来补充一种在upload…

技术揭秘:如何构建量子纠错时代的实施路线图?

&#xff08;原文作者&#xff1a;Q-CTRL 首席执行官兼创始人 Michael J Biercuk 教授&#xff09; 编辑丨慕一 编译/排版丨沛贤 深度好文&#xff1a;4500字丨20分钟阅读 当前&#xff0c;人们对量子纠错 (Quantum Error Correction,QEC) 时代的到来兴致盎然。由于QEC是量…

基于ELFBoard开发板的车牌识别系统

本项目采用的是ElfBoard ELF1开发板作为项目的核心板&#xff0c;主要实现的功能为通过USB 摄像头对车牌进行识别&#xff0c;如果识别成功则会亮绿灯&#xff0c;并将识别的车牌号上传到手机APP上面&#xff0c;车牌识别的实现是通过百度OCR进行实现&#xff0c;手机APP是用Ja…

CSS文本超出显示3个点的方法

在CSS中&#xff0c;如果你想让超出特定长度的文本显示为三个点&#xff08;...&#xff09;&#xff0c;你可以使用text-overflow属性&#xff0c;配合overflow和white-space属性。以下是一个简单的示例&#xff1a; .text-ellipsis { white-space: nowrap; /* 确保文本不会…

从基础到高级:Go中crypto/x509库的终极指南

从基础到高级&#xff1a;Go中crypto/x509库的终极指南 引言x509基础介绍X.509证书的基础知识X.509在加密通信中的作用X.509证书的应用场景 crypto/x509库的核心功能解析X.509证书代码示例&#xff1a;解析证书 创建X.509证书代码示例&#xff1a;创建证书 处理SSL/TLS证书代码…

【前端】nginx 反向代理,实现跨域问题

前面讲跨域的问题&#xff0c;这篇 C# webapi 文章里面已经说过了。在上述文章中是属于从服务器端去允许访问的策略去解决跨域问题。而这里是从客户端的角度利用反向代理的方法去解决跨域问题。 反向代理&#xff1a;其原理就是将请求都接收到一个中间件&#xff08;中间地址&a…

组态王连接施耐德M580PLC

组态王连接施耐德M580 网络架构 网线连接PLC和装组态王软件的PC组态设置帮助 可先查看帮助&#xff1a;菜单栏点击【帮助】->【驱动帮助】&#xff0c;在弹出窗口中PLC系列选择莫迪康PLC的“modbusRtu\ASSCII\TCP”查看组态配置流程&#xff1a; 相关说明&#xff1a; 1、…

挖掘网络宝藏:R和XML库助你轻松抓取 www.sohu.com 图片

摘要 网络上有无数的图片资源&#xff0c;但是如何从特定的网站中快速地抓取图片呢&#xff1f;本文将介绍一种使用 R 语言和 XML 库的简单方法&#xff0c;让你可以轻松地从 www.sohu.com 网站上下载你感兴趣的图片。本文将涉及以下几个方面&#xff1a; 为什么选择 R 语言和…

【b站咸虾米】chapter5_uniapp-API_新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址&#xff1a;【新课uniapp零基础入门到项目打包&#xff08;微信小程序/H5/vue/安卓apk&#xff09;全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p12&share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 5 API 5.1 页面和路…